Directus SQLite 生产环境配置优化

为每个 SQLite 连接设置生产环境 PRAGMA

在 SQLite 连接池创建新连接时,通过 afterCreate 执行一组配置:

conn.run('PRAGMA journal_mode = WAL');
conn.run('PRAGMA synchronous = NORMAL');
conn.run('PRAGMA mmap_size = 134217728');
conn.run('PRAGMA journal_size_limit = 27103364');
conn.run('PRAGMA cache_size = 2000');
conn.run('PRAGMA busy_timeout = 5000');

把 Knex 的 SQLite 事务改为 BEGIN IMMEDIATE

新增了 pnpm patch:

patches/knex@3.1.0.patch:9

- return this.query(conn, 'BEGIN;');
+ return this.query(conn, 'BEGIN IMMEDIATE;');

这样执行 pnpm install 时,pnpm 会自动把补丁应用到 Knex 3.1.0

这里的核心配合是:

BEGIN IMMEDIATE + busy_timeout = 5000

即尽早竞争写锁,并在发生竞争时等待最多 5 秒。


参考文档:

发表于 2026 年 7 月 19 日,星期天