在 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');
新增了 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 秒。
参考文档: