亲爱的开发人员,出于某种原因,在SSD磁盘上更新1720条记录大约需要15秒(特别是在启用修剪时). 我使用以下文档调整了sqlite设置(效果很好) http://web.utk.edu/~jplyon/sqlite/SQLite_optimization_FAQ.ht
我使用以下文档调整了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条记录几乎是即时的.
你能帮助我并给我一些指导如何解决这个问题吗?
在事务中相互之后执行大量单个UPDATE语句时,似乎sqlite将使用TRIM冻结SSD.
我现在改了代码:
a)准备一个命令并对所有要更新的记录重用该命令.
b)每1500条记录执行一次新的交易
这似乎已经修复了sqlite中的冻结.简而言之:重用已准备好的sql语句并确保事务不会变得太大.