2014-01-23 37 views
0

我想知道cache_spill = false pragma是如何工作的。我明白,一旦緩存已滿,即使在提交實際發生之前,它也應該寫入磁盤。我知道這可能是有問題的,因爲它需要保持排除鎖定,直到實際發生。我知道可以增加緩存大小來緩解這個潛在的問題。而且我明白,在這種情況下,我希望奇蹟般地避免任何泄漏,儘管我不相信cache_spill編譯指示以神奇的方式工作。所以:sqlite cache_spill pragma是如何工作的?

  1. 它是否進一步API調用,要求緩存增長失敗,所以發信號通知用戶提交是爲了?

  2. 它會停止寫入內存緩存並使用磁盤,從而導致性能下降,但避免了溢出?

回答

1

僅當數據庫運行到軟內存限制時,纔會發生受此編譯指示影響的緩存溢出。

如果您禁止這些泄漏,更改後的數據只會保留在內存中。 如果您需要一些內存來處理更多更改的數據(或其他任何內容),這可能會導致內存不足錯誤。實際上,大多數操作系統只是將一些數據換出到磁盤上(這樣效率更低,因爲數據在實際提交之前必須從swap中讀回)。

相關問題