【问题标题】:is sqlite caching the results of the query for optimization?sqlite 是否缓存查询结果以进行优化?
【发布时间】:2013-02-25 15:02:05
【问题描述】:

我在 sqlite 中注意到了这种行为。当我重新使用游标对象时,任务管理器中的工作集内存不断增加,直到我的程序抛出内存不足异常。

我重构了代码,这样每次查询时,我都会打开到 sqlite 文件的连接,查询我想要的内容,然后关闭连接。

不知何故,后者似乎并不那么需要内存。它不会增加超过某个点。

我对我的 sqlite 数据库所做的只是对一个表进行简单的选择(其中包含两个聚合)。

这是一种我们可以通过某种方式控制的行为吗?我想重用我的光标对象,但不希望内存被吃掉......

【问题讨论】:

  • SQLite 自己的缓存具有固定大小(通常为 2 MB)。这听起来好像您的某些对象没有正确清理。

标签: python sqlite ironpython


【解决方案1】:

SQLite: PRAGMA cache_size

默认情况下,缓存大小相当大(~2MB),即每个连接。您可以使用 SQL 语句将其设置得更小:

PRAGMA cache_size=-KB

使用负的 '-' KB 值将其设置为以 KiloBytes 为单位的大小,否则设置要使用的页数。

此外,如果使用多个连接,您可能希望使用共享缓存来节省内存: SQLITE: Shared Cache

【讨论】:

    【解决方案2】:

    是的,Python 的 sqlite3 模块使用语句缓存。

    你可以阅读cached_statements参数here

    有关此issue 的更多信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-02
      • 1970-01-01
      • 2011-09-02
      • 1970-01-01
      • 2023-03-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多