页面缓存

Pager部分与PCache部分紧密相连,虽然我本次分到的代码并未包含PCache,但是还是简单介绍一下。</br> SQLite将页内存分配系统实现为两层:</br> 1、PCache结构为页内存分配系统的上层接口结构,与具体的实现无关。</br> 2、用户定义缓冲区模块,PCache1结构为页内存分配系统的默认实现,直接对页空间的分配与回收,上层使用者无需关心其内部实现。</br> Pcache.c这个文件实现的是页面缓存。</br> 一个完整的页面缓存是这种结构的一个实例。</br>

struct PCache {
  PgHdr *pDirty, *pDirtyTail;         /* 按LRU顺序的脏数据页列表 */
  PgHdr *pSynced;                     /* 在脏数据列表中最后同步的页*/
  int nRef;                           /* 引用页的数量 */
  int szCache;                        /* 配置的缓存的大小 */
  int szPage;                         /* 缓存中每个页的大小 */
  int szExtra;                        /* 每个页面的额外空间大小 */
  int bPurgeable;                     /* 如果页面是在后备存储器则为真 */
  int (*xStress)(void*,PgHdr*);       /* Call to try make a page clean */
  void *pStress;                      /* xStress的参数 */
  sqlite3_pcache *pCache;             /* Pluggable cache module */
  PgHdr *pPage1;                      /* 指向第一页的指针 */
};
涉及到关于Cache的函数:</br> 1.sqlite3PagerClearCache()</br> 除非这是一个内存或者临时数据库,清除页面缓存</br> 2.sqlite3PagerCacheStat()</br> 参数eStat一定是SQLITE_DBSTATUS_CACHE_HIT或者SQLITE_DBSTATUS_CACHE_MISS。在返回之前,*pnVal是通过当前缓存命中或者未命中计数来增加,通过eStat的值。如果重置参数是非零,缓存命中或者未命中在返回前都是0.</br> 3.sqlite3PagerSetCachesize()</br> 改变所允许的内存页面的最大页数

results matching ""

    No results matching ""