SQLite Data Accelerator Deployment Guide
Production operating guide for the SQLite data accelerator covering file vs memory mode, busy-timeout handling, and observability.
Authentication & Secrets​
SQLite is an embedded, in-process engine. No external authentication is required. For file-mode, protect the SQLite database file with filesystem permissions and encrypt at rest if the data is sensitive.
Resilience & Durability​
Memory vs File Mode​
| Mode | Durability | Restart behavior |
|---|---|---|
memory | None — lost on restart. | Full refresh on startup. |
file | Durable; persisted to the configured path. | Incremental refresh resumes. |
Use mode: file for any dataset larger than a few hundred MB or where restart speed matters.
Busy Timeout​
| Parameter | Default | Description |
|---|---|---|
busy_timeout_ms | 5000 | Milliseconds SQLite will wait for a table lock before returning SQLITE_BUSY. |
Raise this when you observe database is locked errors under sustained concurrent refresh + read load.
Journal Mode​
The SQLite accelerator leans on SQLite's default durability settings. The Spice-level accelerator does not override journal_mode, synchronous, or checkpoint pragmas; for custom durability tuning, set pragmas via a custom connection string or post-startup SQL.
Federation Across Files​
File-mode SQLite datasets on the same runtime can be federated using SQLite's ATTACH DATABASE mechanism; the accelerator wires up peer attachments automatically for co-located file-mode accelerators.
Capacity & Sizing​
- Single writer: SQLite serializes writes globally per file. High-concurrency write workloads (e.g., very short refresh intervals on many datasets) hit the write mutex — prefer DuckDB or PostgreSQL for those cases.
- Memory: SQLite's page cache defaults are modest; set
PRAGMA cache_size = -<KB>via the connection string for read-heavy workloads on large databases. - Disk: Plan for 1.2–1.5× the raw data size (SQLite uses row-oriented storage with no strong compression by default).
Metrics​
Generic acceleration metrics are available with the dataset_acceleration_ prefix. SQLite-specific OpenTelemetry instruments are not currently registered at the runtime layer.
See Component Metrics for enabling and exporting metrics.
Task History​
SQLite acceleration operations participate in task history through the shared acceleration spans (accelerated_table_refresh, sql_query).
Known Limitations​
partition_byis rejected: SQLite accelerator does not support partitioning; use DuckDB, PostgreSQL, or Cayenne when partitioning is required.- Single writer: Only one write transaction at a time per file.
- Column store advantages absent: For wide analytical scans, DuckDB and Cayenne will outperform SQLite materially.
- No built-in remote replication: Cross-host replication is not provided; use file-level replication,
VACUUM INTO, or a cloud block-store snapshot.
Troubleshooting​
| Symptom | Likely cause | Resolution |
|---|---|---|
database is locked | Concurrent writer contention exceeds busy_timeout_ms. | Raise busy_timeout_ms; reduce concurrent refreshes; or switch to DuckDB/Postgres. |
| Slow reads on a large file-mode database | Default page cache is small for the working set. | Raise PRAGMA cache_size via connection string; consider DuckDB for large-scan workloads. |
Acceleration rejects partition_by | Feature not supported. | Remove partition_by or switch engines. |
| Queries return stale data after refresh | Readers using long-lived transactions hold an old snapshot. | Ensure read paths do not keep connections open across refresh boundaries (runtime handles this, but custom SQL in pre/post refresh hooks can affect it). |
