亲爱的开发人员,出于某种原因,在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似乎做得太多了(比如删除块等),这使得它只需要1720个简单记录更新即可阻止15秒。
奇怪的是:插入2500条记录几乎是即时的。 你能帮助我并给我一些指导如何解决这个问题吗?
答案 0 :(得分:4)
我通过做一些很好的旧测试并尝试找到答案。 在事务中执行大量单个UPDATE语句之后,sqlite似乎会在使用TRIM的SSD上冻结。
我现在更改了代码: a)准备一个命令并对所有要更新的记录重用该命令。 b)每1500条记录执行一次新的交易并开始执行
这似乎已经修复了sqlite中的冻结。简而言之:重用已准备好的sql语句并确保事务不会太大。