diff --git a/src/framework/database/db/db.go b/src/framework/database/db/db.go index 49dcb1e7..bebece53 100644 --- a/src/framework/database/db/db.go +++ b/src/framework/database/db/db.go @@ -38,12 +38,15 @@ func loadDialect() map[string]dialectInfo { switch item["type"] { case "sqlite": pragmas := []string{ - "cache=shared", // Enable shared cache - "_pragma=journal_mode(WAL)", // Enable WAL mode - "_pragma=busy_timeout(5000)", // Set busy timeout 抛出 SQLITE_BUSY 错误 默认0立即,设置等待 5 秒(5000 毫秒) - "_pragma=synchronous(NORMAL)", // Set synchronous mode - "_pragma=wal_autocheckpoint(5000)", // Set WAL auto-checkpoint threshold 设置较大的自动检查点阈值 - "_pragma=mmap_size(67108864)", // Set mmap size 内存映射 I/O 最大字节数为 64MB + "_pragma=journal_mode(WAL)", // 启用 WAL 模式 + "_pragma=synchronous(NORMAL)", // 设置为 NORMAL 同步级别 + "_pragma=wal_autocheckpoint(5000)", // 每 5000 页触发一次检查点 + "_pragma=busy_timeout(5000)", // 设置忙碌时最大等待 5 秒 + "_pragma=mmap_size(268435456)", // 设置 MMAP 大小为 256MB + "_pragma=locking_mode(NORMAL)", // 使用 NORMAL 锁定模式 + "_pragma=journal_size_limit(16777216)", // 设置 WAL 日志文件大小为 16MB + "_pragma=cache_size(10000)", // 设置缓存大小为 10000 页 + "_pragma=temp_store(MEMORY)", // 使用内存存储临时表 } dsn := fmt.Sprintf("%s?%s", item["database"], strings.Join(pragmas, "&")) dialects[key] = dialectInfo{