aboutsummaryrefslogtreecommitdiff
path: root/nar-herder/database.scm
diff options
context:
space:
mode:
authorChristopher Baines <mail@cbaines.net>2023-05-14 22:18:59 +0100
committerChristopher Baines <mail@cbaines.net>2023-05-17 15:42:15 +0100
commit8fd637f8f4fb08f51185ea2c3be5a751ccaa2580 (patch)
treeb8b81e47318e3ecfd057d4a5662956b739b67e36 /nar-herder/database.scm
parent9cdaa19599f4bfa58b8a4af7408c45be3ef2863f (diff)
downloadnar-herder-8fd637f8f4fb08f51185ea2c3be5a751ccaa2580.tar
nar-herder-8fd637f8f4fb08f51185ea2c3be5a751ccaa2580.tar.gz
Enable SQLite to mmap the database file
At least part of it, I think SQLite in Guix is limited to mmap'ing 2GiB.
Diffstat (limited to 'nar-herder/database.scm')
-rw-r--r--nar-herder/database.scm22
1 files changed, 22 insertions, 0 deletions
diff --git a/nar-herder/database.scm b/nar-herder/database.scm
index e5e4905..b922cad 100644
--- a/nar-herder/database.scm
+++ b/nar-herder/database.scm
@@ -198,6 +198,8 @@ CREATE INDEX cached_narinfo_files_narinfo_id
ON narinfo_files (narinfo_id);"))
(define (setup-database database-file metrics-registry)
+ (define mmap-size #f)
+
(let ((db (db-open database-file)))
(sqlite-exec db "PRAGMA journal_mode=WAL;")
(sqlite-exec db "PRAGMA optimize;")
@@ -205,6 +207,18 @@ CREATE INDEX cached_narinfo_files_narinfo_id
(update-schema db)
+ (let ((requested-mmap-bytes 2147418112)
+ (statement
+ (sqlite-prepare
+ db
+ (simple-format #f "PRAGMA mmap_size=~A;"
+ 2147418112))))
+ (match (sqlite-step statement)
+ (#(result-mmap-size)
+ (sqlite-finalize statement)
+ (set! mmap-size
+ result-mmap-size))))
+
(sqlite-close db))
(let ((reader-thread-channel
@@ -213,6 +227,10 @@ CREATE INDEX cached_narinfo_files_narinfo_id
(let ((db
(db-open database-file #:write? #f)))
(sqlite-exec db "PRAGMA busy_timeout = 5000;")
+ (sqlite-exec
+ db
+ (simple-format #f "PRAGMA mmap_size=~A;"
+ (number->string mmap-size)))
(list db)))
#:destructor
(lambda (db)
@@ -243,6 +261,10 @@ CREATE INDEX cached_narinfo_files_narinfo_id
(db-open database-file)))
(sqlite-exec db "PRAGMA busy_timeout = 5000;")
(sqlite-exec db "PRAGMA foreign_keys = ON;")
+ (sqlite-exec
+ db
+ (simple-format #f "PRAGMA mmap_size=~A;"
+ (number->string mmap-size)))
(list db)))
#:destructor
(lambda (db)