【发布时间】:2023-03-18 02:32:01
【问题描述】:
我正在寻找在我的应用程序中减少 SQLite3 内存消耗的方法。
在每次执行时,它都会创建一个具有以下架构的表:
(main TEXT NOT NULL PRIMARY KEY UNIQUE, count INTEGER DEFAULT 0)
之后,数据库每秒填充 50k 次操作。只写。
当一个项目已经存在时,它会使用更新查询更新“计数”(我认为这称为 UPSERT)。这些是我的疑问:
INSERT OR IGNORE INTO table (main) VALUES (@SEQ);
UPDATE tables SET count=count+1 WHERE main = @SEQ;
这样,每个事务有 500 万次操作,我可以非常快速地写入数据库。
我并不真正关心这个问题的磁盘空间,但我的 RAM 空间非常有限。因此,我不能浪费太多的内存。
sqlite3_user_memory() 通知它的内存消耗在执行期间增长到近 3GB。如果我通过 sqlite3_soft_heap_limit64() 将其限制为 2GB,那么当达到 2GB 时,数据库操作的性能会下降到几乎为零。
我必须将缓存大小提高到 1M(默认页面大小)才能达到理想的性能。
我可以做些什么来减少内存消耗?
【问题讨论】:
-
桌子有多大?
-
@CL。 35M 行,每个主条目是一个包含 30 多个字符的字符串。
标签: c performance sqlite memory-consumption