sqlite cache_spill pragma如何正常工作?

时间:2014-01-23 21:01:57

标签: sqlite

我想知道cache_spill = false pragma是如何工作的。我知道一旦缓存已满,它应该在提交实际发生之前写入磁盘。我知道这可能会有问题,因为它需要保留一个独占锁定,直到实际提交发生。我知道可以增加缓存大小以改善这个潜在的问题。我理解,尽管我不相信cache_spill实用程序以神奇的方式工作,但我想要在这种情况下神奇地避免任何泄漏。所以:

  1. 是否进行了进一步的API调用,需要缓存增长失败,因此向用户发出提交信号的顺序?

  2. 是否会停止写入内存缓存并改用磁盘,从而导致性能下降,但避免漏油?

1 个答案:

答案 0 :(得分:1)

仅当数据库遇到软内存限制时,才会发生受此pragma影响的缓存溢出。

如果您禁止这些溢出,则更改的数据只会保留在内存中。 如果您需要一些内存用于更多更改的数据(或其他任何内容),这可能会导致内存不足错误。 在实践中,大多数操作系统只会将一些数据交换到磁盘(这样效率会更低,因为数据必须在实际提交之前从交换中读回)。

相关问题