Performance SSD磁盘上的sqlite更新速度慢(1720条记录的更新时间为15秒)

Performance SSD磁盘上的sqlite更新速度慢(1720条记录的更新时间为15秒),performance,sqlite,solid-state-drive,Performance,Sqlite,Solid State Drive,亲爱的开发人员同事,出于某种原因,在SSD磁盘上更新1720条记录大约需要15秒(特别是启用了trim时) 我使用以下文档调整了sqlite设置(效果很好) 我有以下PRAGMA集合来优化性能,并且我确实在整个更新集合中使用事务 sqlite3_exec(database, "PRAGMA cache_size=500000;", nil, nil, nil); sqlite3_exec(database, "PRAGMA synchronous=OFF", nil, nil, nil); s

亲爱的开发人员同事,出于某种原因,在SSD磁盘上更新1720条记录大约需要15秒(特别是启用了trim时)

我使用以下文档调整了sqlite设置(效果很好)

我有以下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语句,确保事务不会变得太大