为了账号安全,请及时绑定邮箱和手机立即绑定

SQLite 3 不会在 Golang 中释放内存

SQLite 3 不会在 Golang 中释放内存

Go
阿晨1998 2021-08-23 16:52:47
我有越来越转至问题与SQLite的发挥很好。我固定它在没有问题的过去,但它已经有一段时间,我不记得我做过什么来得到它的正常工作。我使用的mattn/go-sqlite3封装工艺,并插入大量的数据到一个SQLite数据库,但不知何故进入最终总是吃的都是我的RAM,直到最后一个错误状态代码退出。只是,以确保我已经分离出的内存饥饿问题的SQLite我写了下面的程序进行测试:package mainimport (    "database/sql"    "fmt"    "log"    _ "github.com/mattn/go-sqlite3")func main() {    db, err := sql.Open("sqlite3", "./test.db"); if err != nil {        log.Fatal(err)    }; defer db.Close()    ddl := `        PRAGMA automatic_index = ON;        PRAGMA cache_size = 32768;        PRAGMA cache_spill = OFF;        PRAGMA foreign_keys = ON;        PRAGMA journal_size_limit = 67110000;        PRAGMA locking_mode = NORMAL;        PRAGMA page_size = 4096;        PRAGMA recursive_triggers = ON;        PRAGMA secure_delete = ON;        PRAGMA synchronous = NORMAL;        PRAGMA temp_store = MEMORY;        PRAGMA journal_mode = WAL;        PRAGMA wal_autocheckpoint = 16384;        CREATE TABLE IF NOT EXISTS "user" (            "id" TEXT,            "username" TEXT,            "password" TEXT        );        CREATE UNIQUE INDEX IF NOT EXISTS "id" ON "user" ("id");    `    _, err = db.Exec(ddl); if err != nil {        log.Fatal(err)    }    queries := map[string]*sql.Stmt{}    queries["user"], _ = db.Prepare(`INSERT OR REPLACE INTO "user" VALUES (?, ?, ?);`); if err != nil {        log.Fatal(err)    }; defer queries["user"].Close()    tx, err := db.Begin(); if err != nil {        log.Fatal(err)    }    for i := 0; i < 10000000; i++ {        user := map[string]string{            "id": string(i),            "username": "foo",            "password": "bar",        }        _, err := tx.Stmt(queries["user"]).Exec(user["id"], user["username"], user["password"]); if err != nil {            log.Fatal(err)        }当我运行上面的代码,围棋吃超过100 MIB的记忆每一秒每没有任何释放,并且一分钟左右之后,它最终消费6/7吉布然后程序就会被杀死。我尝试过定义和不定义 SQLite PRAGMA 的变化,但没有运气。根据定义的编译指示,SQLite的不应该使用的RAM超过128 MIB。我是否犯了任何错误,或者 mattn/go-sqlite3 或 Go GC 有什么问题?
查看完整描述

3 回答

  • 3 回答
  • 0 关注
  • 504 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信