使用sqlite缓存的正确方法是什么?如何检查?

时间:2018-02-09 06:21:22

标签: c sqlite caching

经过一番研究,我发现SQLite有两种缓存:"私有页面缓存"和#34;共享缓存"。我尝试使用它们并测试性能,但我真的很混淆它们的用法。以下是我的问题:

  1. 默认情况下会打开缓存吗?
  2. 打开私人页面缓存和共享缓存的正确方法是什么?
  3. 我可以通过SQLITE_DBSTATUS_CACHE_USED和SQLITE_STATUS_PAGECACHE_USED检查sqlite缓存状态吗?这两个项目有什么不同?
  4. 我的方法是禁用/启用私有缓存/启用共享缓存,如下所示,这些是对的吗?

    • 禁用(默认情况下打开?):

      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_USED SQLITE_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标志无法正常工作?

1 个答案:

答案 0 :(得分:0)

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

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

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