我正在使用system.data.sqlite包装器来缓存大量数据的应用程序。几乎所有这些数据都分为1个表,包含3列。来自缓存的数据从Web服务调用中下拉并循环插入数据库,直到缓存完整数据集。每次调用Web服务都会删除3000条记录,并在一次事务中将它们插入数据库。
数据库增长到大约8MB后,插入开始变慢,并且在每次事务提交后创建了2-3MB的日志文件。这会导致大量I / O,实际上会降低操作系统(Windows XP)的速度,直至在事务提交时无响应。
我已经读过SQLite不使用聚簇索引,因此我不确定数据是如何排序的,或者是否在插入时进行了排序。数据没有按照有序的方式插入。
如果发现此问题,最令人困惑的事情是,这只发生在我们调用生产Web服务时,QA的Web服务不会导致在每个事务提交时创建这个大型日志文件(QA中的一个是约2KB-14KB)。 Web服务正在从SQLServer数据库中检索数据。生产和质量保证之间的唯一区别是质量保证的数据库是大约一年前的生产备份。缓存算法将首先从最旧的数据开始,在这种情况下,这两个数据库(QA和Prod)应该是99%相同。
SQLite是否会创建这个大型日志文件,因为它正在插入无序数据并且必须拆分页面?升级到WAL会缓解这个问题吗?
答案 0 :(得分:0)
没有关于PRAGMA,连接字符串或SQL语句的任何信息,很难帮助... 也许看看http://blog.teamleadnet.com/2012/03/sqlite-performance-tuning.html 您确定您的语句在一个事务中执行吗?也许把它们分成几个......