+15
-3
internal/storage/sqlite.go
+15
-3
internal/storage/sqlite.go
···
21
21
return nil, err
22
22
}
23
23
24
-
// Enable WAL mode for better concurrency
25
-
if _, err := db.Exec("PRAGMA journal_mode=WAL"); err != nil {
26
-
return nil, err
24
+
// Performance optimizations
25
+
pragmas := []string{
26
+
"PRAGMA journal_mode=WAL",
27
+
"PRAGMA synchronous=NORMAL", // Faster than FULL, still safe with WAL
28
+
"PRAGMA cache_size=-64000", // 64MB cache (negative = KB)
29
+
"PRAGMA temp_store=MEMORY", // Store temp tables in memory
30
+
"PRAGMA mmap_size=268435456", // 256MB memory-mapped I/O
31
+
"PRAGMA page_size=4096", // Optimal page size
32
+
"PRAGMA busy_timeout=5000", // Wait up to 5s for locks
33
+
}
34
+
35
+
for _, pragma := range pragmas {
36
+
if _, err := db.Exec(pragma); err != nil {
37
+
return nil, fmt.Errorf("failed to set pragma %s: %w", pragma, err)
38
+
}
27
39
}
28
40
29
41
return &SQLiteDB{db: db}, nil