【发布时间】:2018-02-10 04:44:45
【问题描述】:
经过一番研究,我发现SQLite有两种缓存:“私有页面缓存”和“共享缓存”。我尝试使用它们并测试性能,但我真的对它们的使用感到困惑。以下是我的问题:
- 会默认打开缓存吗?
- 打开私有页面缓存和共享缓存的正确方法是什么?
- 能否通过 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_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 标志没有任何原因不起作用??
【问题讨论】: