/ Check-in [b332a84d]
Login
SQLite training in Houston TX on 2019-11-05 (details)
Part of the 2019 Tcl Conference

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:Small performance improvement to the dirty list handling in the pager.
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA1: b332a84d5154f70f3197537df4af243eaebbb011
User & Date: drh 2014-09-12 20:30:59
Context
2014-09-15
11:14
Adjust comments to show that subquery flattening restriction (10) was removed from the code back in 2005. This is a comment change only. check-in: 4ff0eb96 user: drh tags: trunk
2014-09-12
20:30
Small performance improvement to the dirty list handling in the pager. check-in: b332a84d user: drh tags: trunk
17:41
Simplify the way the column cache is managed around OP_Move instructions. check-in: 32055623 user: drh tags: trunk
Changes
Hide Diffs Unified Diffs Ignore Whitespace Patch

Changes to src/pcache.c.

112
113
114
115
116
117
118


119
120
121
122
123
124
125
126

127
128
129
130
131
132
133
...
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
  if( addRemove & PCACHE_DIRTYLIST_ADD ){
    assert( pPage->pDirtyNext==0 && pPage->pDirtyPrev==0 && p->pDirty!=pPage );
  
    pPage->pDirtyNext = p->pDirty;
    if( pPage->pDirtyNext ){
      assert( pPage->pDirtyNext->pDirtyPrev==0 );
      pPage->pDirtyNext->pDirtyPrev = pPage;


    }else if( p->bPurgeable ){
      assert( p->eCreate==2 );
      p->eCreate = 1;
    }
    p->pDirty = pPage;
    if( !p->pDirtyTail ){
      p->pDirtyTail = pPage;
    }

    if( !p->pSynced && 0==(pPage->flags&PGHDR_NEED_SYNC) ){
      p->pSynced = pPage;
    }
    expensive_assert( pcacheCheckSynced(p) );
  }
}

................................................................................
void SQLITE_NOINLINE sqlite3PcacheRelease(PgHdr *p){
  assert( p->nRef>0 );
  p->nRef--;
  if( p->nRef==0 ){
    p->pCache->nRef--;
    if( (p->flags&PGHDR_DIRTY)==0 ){
      pcacheUnpin(p);
    }else{
      /* Move the page to the head of the dirty list. */
      pcacheManageDirtyList(p, PCACHE_DIRTYLIST_FRONT);
    }
  }
}

/*







>
>
|
|
|
|
<
<
<

>







 







|







112
113
114
115
116
117
118
119
120
121
122
123
124



125
126
127
128
129
130
131
132
133
...
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
  if( addRemove & PCACHE_DIRTYLIST_ADD ){
    assert( pPage->pDirtyNext==0 && pPage->pDirtyPrev==0 && p->pDirty!=pPage );
  
    pPage->pDirtyNext = p->pDirty;
    if( pPage->pDirtyNext ){
      assert( pPage->pDirtyNext->pDirtyPrev==0 );
      pPage->pDirtyNext->pDirtyPrev = pPage;
    }else{
      p->pDirtyTail = pPage;
      if( p->bPurgeable ){
        assert( p->eCreate==2 );
        p->eCreate = 1;
      }



    }
    p->pDirty = pPage;
    if( !p->pSynced && 0==(pPage->flags&PGHDR_NEED_SYNC) ){
      p->pSynced = pPage;
    }
    expensive_assert( pcacheCheckSynced(p) );
  }
}

................................................................................
void SQLITE_NOINLINE sqlite3PcacheRelease(PgHdr *p){
  assert( p->nRef>0 );
  p->nRef--;
  if( p->nRef==0 ){
    p->pCache->nRef--;
    if( (p->flags&PGHDR_DIRTY)==0 ){
      pcacheUnpin(p);
    }else if( p->pDirtyPrev!=0 ){
      /* Move the page to the head of the dirty list. */
      pcacheManageDirtyList(p, PCACHE_DIRTYLIST_FRONT);
    }
  }
}

/*