From 1a2853254663ad4f0892506a5f3689f829035d7f Mon Sep 17 00:00:00 2001 From: Gani Georgiev Date: Tue, 1 Nov 2022 22:02:38 +0200 Subject: [PATCH] updated db pool limits --- core/db_cgo.go | 8 ++++++++ core/db_nocgo.go | 10 ++++++---- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/core/db_cgo.go b/core/db_cgo.go index 02555c74..df4b3f28 100644 --- a/core/db_cgo.go +++ b/core/db_cgo.go @@ -4,6 +4,7 @@ package core import ( "fmt" + "time" _ "github.com/mattn/go-sqlite3" "github.com/pocketbase/dbx" @@ -20,6 +21,13 @@ func connectDB(dbPath string) (*dbx.DB, error) { return nil, openErr } + // use a fixed connection pool to limit the SQLITE_BUSY errors + // and reduce the open file descriptors + // (the limits are arbitrary and may change in the future) + db.DB().SetMaxOpenConns(500) + db.DB().SetMaxIdleConns(30) + db.DB().SetConnMaxIdleTime(5 * time.Minute) + // additional pragmas not supported through the dsn string _, err := db.NewQuery(` pragma journal_size_limit = 100000000; diff --git a/core/db_nocgo.go b/core/db_nocgo.go index dd3dfb27..68bae2e2 100644 --- a/core/db_nocgo.go +++ b/core/db_nocgo.go @@ -14,18 +14,20 @@ func connectDB(dbPath string) (*dbx.DB, error) { // note: the busy_timeout pragma must be first because // the connection needs to be set to block on busy before WAL mode // is set in case it hasn't been already set by another connection - pragmas := "_pragma=busy_timeout(100000)&_pragma=journal_mode(WAL)&_pragma=foreign_keys(1)&_pragma=synchronous(NORMAL)&_pragma=journal_size_limit(100000000)" + pragmas := "_pragma=busy_timeout(10000)&_pragma=journal_mode(WAL)&_pragma=foreign_keys(1)&_pragma=synchronous(NORMAL)&_pragma=journal_size_limit(100000000)" db, err := dbx.MustOpen("sqlite", fmt.Sprintf("%s?%s", dbPath, pragmas)) if err != nil { return nil, err } - // use a fixed connection pool to limit the SQLITE_BUSY errors + // use a fixed connection pool to limit the SQLITE_BUSY errors and + // reduce the open file descriptors + // (the limits are arbitrary and may change in the future) // // @see https://gitlab.com/cznic/sqlite/-/issues/115 - db.DB().SetMaxOpenConns(200) - db.DB().SetMaxIdleConns(200) + db.DB().SetMaxOpenConns(500) + db.DB().SetMaxIdleConns(30) db.DB().SetConnMaxIdleTime(5 * time.Minute) return db, nil