SQLITE_BUSY——需要把 journal_mode、PRAGMA、队列并发上限与构建锁写进同一张运维图。
共享卷 + WAL:三类典型抖动
面向裸金属 Mac 多机并联、元数据或缓存放网络挂载的团队。固定 URL:2026-clustervps-macmini-sqlite-wal-shared-volume-matrix.html。调度与 flock 见《Nomad 亲和、构建锁与磁盘水位》;rsync 见《跨区并联集群 rsync 决策矩阵》;DNS/制品库见《拆分 DNS 与制品库矩阵》;远程抖动见《Mosh 与 SSH 抖动》。技术博客首页。
- 检查点与构建抢盘:自动或手动
wal_checkpoint写回主库时,与 Xcode 等大量小文件 IO 争用同盘或 NAS,p95 编译时间拉长。 - 网络 FS 语义:部分 SMB/NFS 不满足 SQLite 锁与缓存假设;多写者或客户端缓存异常放大损坏风险。
- 水位与 WAL:
-wal/-shm占卷;1TB 上叠 DerivedData 与长 WAL 易「看似有空间、写已失败」。
决策矩阵:部署形态 × journal_mode × 风险
| 部署形态 | journal_mode 建议 | 检查点与构建 | 结论 |
|---|---|---|---|
| 库在本机 APFS,共享卷只放导出物 | WAL 可接受;构建与元数据解耦。 |
检查点与本机 SSD 对齐,网络卷不参与写库。 | 首选架构。 |
| 库必须在共享卷(SMB/NFS) | 优先评估 DELETE 或迁移;若坚持 WAL,须单写者多读者并下调自动检查点频率。 |
显式在低峰执行 PRAGMA wal_checkpoint(TRUNCATE),避免与高峰编译重叠。 |
高风险;需值班 runbook。 |
| 多机只读分析(报表/扫描) | 使用只读连接或复制到本地再打开;避免在挂载点上执行写事务。 | 无检查点写入路径。 | 与并联读扩展兼容。 |
能不放共享卷就不放;若强制,用单写入队列串行化写路径,Mac Mini M4 本地 SSD 留给编译与热缓存。
可粘贴:连接后 PRAGMA 与 journal_mode
在 sqlite3 /path/to/app.db 或应用首连逻辑中按需执行(路径与同步级别请按合规与容灾要求裁剪):
-- 新建库或迁移完成后一次性确认模式(共享卷慎用 WAL) PRAGMA journal_mode=WAL; -- 仅当库在本机 SSD 或已验证 NAS 锁语义时 PRAGMA synchronous=NORMAL; -- 本机 SSD 常用折中;网络卷倾向 FULL 或改架构 PRAGMA wal_autocheckpoint=400; -- 默认 1000 页;IO 抖动大时下调,减轻突发写回 PRAGMA busy_timeout=8000; -- 毫秒;缓解短时锁竞争,不能替代单写者设计 PRAGMA mmap_size=0; -- 在部分网络挂载上关闭 mmap 更易观测与排错 PRAGMA foreign_keys=ON;
WAL 持续增长且水位紧:维护窗执行 PRAGMA wal_checkpoint(TRUNCATE);,且无并发写。改 journal_mode=DELETE 须低峰并先备份。
队列并发上限(实操取值)
同一路径上 SQLite 仍是单写者:对会写该库的 CI/Nomad job 设写并发 = 1(队列深度 1)。检查点与重编译同盘时,单机编译并发先压 2~4,看监控再调;勿假设各 NFS 客户端缓存一致。
busy_timeout 示例量级,可按 SLA 调整构建锁与检查点错峰
提升目录、合并索引等临界区用 flock 或 max_parallel=1 二选一作权威串列(见 Nomad 姊妹篇);主动 checkpoint 放入同一互斥窗。锁文件放本机,勿在网络挂载上依赖 OS 锁。
1TB / 2TB 磁盘水位验收清单
| 验收项 | 1TB 节点 | 2TB 节点 |
|---|---|---|
| 可用空间裕量(含 WAL/SHM) | 日常 < 70% 使用;预留 ≥15% 给快照与峰值 WAL。 | 同上;允许更高缓存驻留但仍需监控 -wal 上限。 |
| 告警阈值 | 80% 触发限流与清理;90% 硬停非关键任务。 | 阈值相同,重点转向 IO 延迟与检查点时长。 |
| 并联发布前 | 确认无多写者打开同一共享库;跑一轮只读冒烟 + 单次写压测;记录 PRAGMA journal_mode 返回值与文件系统类型。 |
|
验收以集群最满卷为准。
常见问题(FAQ)
WAL 一定比 DELETE 快吗?在本机 SSD 上通常如此;在共享卷上若检查点与业务写冲突,DELETE 有时反而更易预测尾延迟——请以压测为准。
自动检查点可以关掉吗?可通过 wal_autocheckpoint=0 关闭自动检查点并改用手动维护窗;代价是 WAL 文件可能持续增长,必须配套监控与磁盘水位。
多机读同一库可以吗?只读多机可行;写须串行化,勿让只读连接池误接迁移写。
为并联集群选择 1TB / 2TB 与同区 Mac mini M4
按磁盘档位与区域对齐 CI 与元数据布局;无需登录即可查看方案、价格与节点说明。评估「库落本地还是共享卷」或队列参数可查阅帮助中心或通过售前/工单联系。