From 9603dd9188ae8fbff72b5be992a3f8c45b3fde66 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Mon, 20 Oct 2025 16:07:05 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=9B=B4=E6=96=B0SQLite=E8=BF=9E?= =?UTF-8?q?=E6=8E=A5=E9=85=8D=E7=BD=AE=EF=BC=8C=E5=90=AF=E7=94=A8=E5=85=B1?= =?UTF-8?q?=E4=BA=AB=E7=BC=93=E5=AD=98=E5=92=8CWAL=E6=A8=A1=E5=BC=8F?= =?UTF-8?q?=EF=BC=8C=E8=AE=BE=E7=BD=AE=E5=BF=99=E7=AD=89=E5=BE=85=E5=92=8C?= =?UTF-8?q?=E5=86=85=E5=AD=98=E6=98=A0=E5=B0=84=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build/database/lite/install/ainstall.sql | 9 --------- src/framework/database/db/db.go | 20 ++++++++++---------- 2 files changed, 10 insertions(+), 19 deletions(-) delete mode 100644 build/database/lite/install/ainstall.sql diff --git a/build/database/lite/install/ainstall.sql b/build/database/lite/install/ainstall.sql deleted file mode 100644 index 9ec324b1..00000000 --- a/build/database/lite/install/ainstall.sql +++ /dev/null @@ -1,9 +0,0 @@ --- ---------------------------- --- Configuration --- ---------------------------- - --- 启用完整的自动空间回收 -PRAGMA auto_vacuum = FULL; --- 日志模式设置为 WAL 并发写入 -PRAGMA journal_mode = WAL; -PRAGMA synchronous = NORMAL; diff --git a/src/framework/database/db/db.go b/src/framework/database/db/db.go index a7a11fd4..eab32a93 100644 --- a/src/framework/database/db/db.go +++ b/src/framework/database/db/db.go @@ -5,6 +5,7 @@ import ( "log" "os" "regexp" + "strings" "time" "github.com/glebarez/sqlite" @@ -36,7 +37,15 @@ func loadDialect() map[string]dialectInfo { // 数据库类型对应的数据库连接 switch item["type"] { case "sqlite": - dsn := fmt.Sprintf("%s", item["database"]) + 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 + } + dsn := fmt.Sprintf("%s?%s", item["database"], strings.Join(pragmas, "&")) dialects[key] = dialectInfo{ dialectic: sqlite.Open(dsn), logging: parse.Boolean(item["logging"]), @@ -108,15 +117,6 @@ func Connect() { sqlDB.SetMaxOpenConns(100) // SetConnMaxLifetime 设置了连接可复用的最大时间。 sqlDB.SetConnMaxLifetime(time.Hour) - // 执行初始连接配置 - if db.Name() == "sqlite" { - // -- 设置较大的自动检查点阈值 - sqlDB.Exec("PRAGMA wal_autocheckpoint = 5000;") - // -- 内存映射 I/O 最大字节数为 64MB - sqlDB.Exec("PRAGMA mmap_size = 67108864;") - // 抛出 SQLITE_BUSY 错误 默认0立即,设置等待 5 秒(5000 毫秒) - sqlDB.Exec("PRAGMA busy_timeout = 5000;") - } logger.Infof("database %s connection is successful.", key) dbMap[key] = db }