4

亲爱的开发人员,出于某种原因,在 SSD 磁盘上更新 1720 条记录大约需要 15 秒(尤其是在启用修剪时)。

我使用以下文档调整了 sqlite 设置(效果很好) http://web.utk.edu/~jplyon/sqlite/SQLite_optimization_FAQ.html

我有以下 PRAGMA 设置来优化性能,并且我确实使用了围绕完整更新集的事务。

sqlite3_exec(database, "PRAGMA cache_size=500000;", nil, nil, nil);
sqlite3_exec(database, "PRAGMA synchronous=OFF", nil, nil, nil);
sqlite3_exec(database, "PRAGMA count_changes=OFF", nil, nil, nil);
sqlite3_exec(database, "PRAGMA temp_store=MEMORY", nil, nil, nil);

看起来 SSD 做的太多了(比如删除块等),这使得它阻塞了 15 秒,仅更新了 1720 条简单记录。

奇怪的是:插入 2500 条记录几乎是即时的。你能帮助我并给我一些指示如何解决这个问题吗?

4

1 回答 1

4

我通过做一些好的旧测试和尝试找到了答案。在事务中一个接一个地执行大量单个 UPDATE 语句时,sqlite 似乎会在带有 TRIM 的 SSD 上冻结。

我现在更改了代码:a) 准备一个命令并将该命令重用于所有要更新的记录。b) 每 1500 条记录提交并开始一个新事务

这似乎已经修复了 sqlite 中的冻结问题。简而言之:重用准备好的 sql 语句并确保事务不会变得太大。

于 2011-06-06T07:37:58.277 回答