feat: sqlite模式改为wal支持并发写入临时日志

This commit is contained in:
TsMask
2025-10-18 18:01:21 +08:00
parent db181fb0ce
commit 1a501bf9a7
3 changed files with 24 additions and 5 deletions

View File

@@ -0,0 +1,9 @@
-- ----------------------------
-- Configuration
-- ----------------------------
-- 启用完整的自动空间回收
PRAGMA auto_vacuum = FULL;
-- 日志模式设置为 WAL 并发写入
PRAGMA journal_mode = WAL;
PRAGMA synchronous = NORMAL;

View File

@@ -36,7 +36,7 @@ func loadDialect() map[string]dialectInfo {
// 数据库类型对应的数据库连接 // 数据库类型对应的数据库连接
switch item["type"] { switch item["type"] {
case "sqlite": case "sqlite":
dsn := fmt.Sprint(item["database"]) dsn := fmt.Sprintf("%s", item["database"])
dialects[key] = dialectInfo{ dialects[key] = dialectInfo{
dialectic: sqlite.Open(dsn), dialectic: sqlite.Open(dsn),
logging: parse.Boolean(item["logging"]), logging: parse.Boolean(item["logging"]),
@@ -108,6 +108,15 @@ func Connect() {
sqlDB.SetMaxOpenConns(100) sqlDB.SetMaxOpenConns(100)
// SetConnMaxLifetime 设置了连接可复用的最大时间。 // SetConnMaxLifetime 设置了连接可复用的最大时间。
sqlDB.SetConnMaxLifetime(time.Hour) 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) logger.Infof("database %s connection is successful.", key)
dbMap[key] = db dbMap[key] = db
} }

View File

@@ -14,12 +14,12 @@ import (
// ImportSQL 导入SQL // ImportSQL 导入SQL
func ImportSQL() { func ImportSQL() {
sqlPath := config.Get("sqlPath").(string) sqlPath, sqlPathOk := config.Get("sqlPath").(string)
if sqlPath == "" { if !sqlPathOk || sqlPath == "" {
return return
} }
sqlSource := config.Get("sqlSource").(string) sqlSource, sqlSourceOk := config.Get("sqlSource").(string)
if sqlSource == "" { if !sqlSourceOk || sqlSource == "" {
sqlSource = config.Get("database.defaultDataSourceName").(string) sqlSource = config.Get("database.defaultDataSourceName").(string)
} }
@@ -61,6 +61,7 @@ func ImportSQL() {
} }
// log.Println("process success") // log.Println("process success")
Close()
os.Exit(0) os.Exit(0)
} }