2011-05-20 111 views
5

尊敬的开发者,由于某些原因,在SSD磁盘上(尤其是启用了修整),1720条记录的更新大约需要15秒。SSD磁盘上的sqlite更新速度较慢(1720条记录为15秒)

我曾尝试使用以下文件(效果很好) http://web.utk.edu/~jplyon/sqlite/SQLite_optimization_FAQ.html

我有以下PRAGMA的设置以优化性能和I DO周围使用全套更新的交易调整了sqlite的设置。

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条记录几乎是即时的。 你能帮我,给我一些指导如何解决这个问题吗?

回答

5

我找到了答案,做了一些很好的旧测试并尝试。 看来,sqlite会冻结固态硬盘与TRIM时做了很多单个UPDATE语句之后,在一个事务中彼此。

我已经更改了代码: a)准备一个命令并重新使用该命令来处理所有待更新的记录。 b)COMMIT并开始每1500条记录新的交易

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