【问题标题】:What is the correct way to use sqlite cache and how could I check it?使用 sqlite 缓存的正确方法是什么,我该如何检查它?
【发布时间】:2018-02-10 04:44:45
【问题描述】:

经过一番研究,我发现SQLite有两种缓存:“私有页面缓存”和“共享缓存”。我尝试使用它们并测试性能,但我真的对它们的使用感到困惑。以下是我的问题:

  1. 会默认打开缓存吗?
  2. 打开私有页面缓存和共享缓存的正确方法是什么?
  3. 能否通过 SQLITE_DBSTATUS_CACHE_USED 和 SQLITE_STATUS_PAGECACHE_USED 检查 sqlite 缓存状态?这两个项目有什么不同?

我的禁用/启用私有缓存/启用共享缓存的方法如下,对吗?

  • 禁用(默认打开?):

    ret = sqlite3_open_v2(db_name, db_handle,SQLITE_OPEN_READONLY , NULL);

  • 启用私有缓存:

    ret = sqlite3_open_v2(db_name, db_handle, SQLITE_OPEN_READONLY | SQLITE_OPEN_PRIVATECACHE, NULL);

  • 启用共享缓存:

    ret = sqlite3_open_v2(db_name, db_handle, SQLITE_OPEN_READONLY | SQLITE_OPEN_SHAREDCACHE, NULL);

我现在通过查看 SQLITE_STATUS_PAGECACHE_USEDSQLITE_DBSTATUS_CACHE_USED 来检查 sqlite。

这真的让我很困惑。即使我没有启用缓存,SQLITE_DBSTATUS_CACHE_USED 总是有一个值。对于SQLITE_STATUS_PAGECACHE_USED,无论我启用还是禁用缓存,只有在我初始化sqlite之前添加以下代码时才会出现0:

sqlite3_config(SQLITE_CONFIG_PAGECACHE, buf, sz, N);

看起来 sqlite_open_v2 标志没有任何原因不起作用??

【问题讨论】:

    标签: c sqlite caching


    【解决方案1】:

    SQLite 有一种缓存,即页面缓存,并且始终处于启用状态。

    在共享缓存模式下,同一进程中的多个连接可以共享页面缓存。因此,只要您使用单个连接,您就不会看到任何差异。

    (共享缓存模式适用于在内存受限的设备中运行的多线程服务器;它可能对您没有用处。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-16
      • 2012-04-05
      • 2019-05-15
      • 2016-05-09
      • 1970-01-01
      • 2019-05-17
      相关资源
      最近更新 更多