【问题标题】:sqlite updates slow (15 seconds for 1720 records) on SSD diskSSD 磁盘上的 sqlite 更新慢(1720 条记录需要 15 秒)
【发布时间】:2011-06-06 15:37:58
【问题描述】:

亲爱的开发人员,出于某种原因,在 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 条记录几乎是即时的。 你能帮我并给我一些如何解决这个问题的建议吗?

【问题讨论】:

    标签: performance sqlite solid-state-drive


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-25
      • 1970-01-01
      • 1970-01-01
      • 2015-07-22
      • 2017-02-12
      相关资源
      最近更新 更多