diff options
author | Christopher Baines <mail@cbaines.net> | 2023-05-14 22:18:59 +0100 |
---|---|---|
committer | Christopher Baines <mail@cbaines.net> | 2023-05-17 15:42:15 +0100 |
commit | 8fd637f8f4fb08f51185ea2c3be5a751ccaa2580 (patch) | |
tree | b8b81e47318e3ecfd057d4a5662956b739b67e36 | |
parent | 9cdaa19599f4bfa58b8a4af7408c45be3ef2863f (diff) | |
download | nar-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.
-rw-r--r-- | nar-herder/database.scm | 22 |
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) |