mirror of
https://github.com/sqlite/sqlite.git
synced 2025-08-07 02:42:48 +03:00
Performance optimizations in the pager_write() routine of pager.c.
FossilOrigin-Name: bc5febef921bd12ca7760e9d07d3be0e67140320
This commit is contained in:
12
manifest
12
manifest
@@ -1,5 +1,5 @@
|
|||||||
C Reduce\sthe\snumber\sof\scalls\sto\sthe\ssubjRequiresPage()\sroutine\sinside\sof\spager.
|
C Performance\soptimizations\sin\sthe\spager_write()\sroutine\sof\spager.c.
|
||||||
D 2013-12-13T19:48:04.970
|
D 2013-12-13T20:45:50.607
|
||||||
F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
|
F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
|
||||||
F Makefile.in 2ef13430cd359f7b361bb863504e227b25cc7f81
|
F Makefile.in 2ef13430cd359f7b361bb863504e227b25cc7f81
|
||||||
F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
|
F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
|
||||||
@@ -207,7 +207,7 @@ F src/os.h 4a46270a64e9193af4a0aaa3bc2c66dc07c29b3f
|
|||||||
F src/os_common.h 92815ed65f805560b66166e3583470ff94478f04
|
F src/os_common.h 92815ed65f805560b66166e3583470ff94478f04
|
||||||
F src/os_unix.c 60a7b3b23e6fcf83a50d1e320b280b551724e11f
|
F src/os_unix.c 60a7b3b23e6fcf83a50d1e320b280b551724e11f
|
||||||
F src/os_win.c 16eac0961603182ffc10c02b39fe830126538e07
|
F src/os_win.c 16eac0961603182ffc10c02b39fe830126538e07
|
||||||
F src/pager.c 3436cc9cce915e3fbcf9ae26a877816c2e6158f1
|
F src/pager.c efa923693e958696eee69b205a20bfbc402c8480
|
||||||
F src/pager.h ffd5607f7b3e4590b415b007a4382f693334d428
|
F src/pager.h ffd5607f7b3e4590b415b007a4382f693334d428
|
||||||
F src/parse.y acee1a9958539e21263362b194594c5255ad2fca
|
F src/parse.y acee1a9958539e21263362b194594c5255ad2fca
|
||||||
F src/pcache.c f8043b433a57aba85384a531e3937a804432a346
|
F src/pcache.c f8043b433a57aba85384a531e3937a804432a346
|
||||||
@@ -1146,7 +1146,7 @@ F tool/vdbe-compress.tcl 0cf56e9263a152b84da86e75a5c0cdcdb7a47891
|
|||||||
F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
|
F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
|
||||||
F tool/warnings.sh d1a6de74685f360ab718efda6265994b99bbea01
|
F tool/warnings.sh d1a6de74685f360ab718efda6265994b99bbea01
|
||||||
F tool/win/sqlite.vsix 030f3eeaf2cb811a3692ab9c14d021a75ce41fff
|
F tool/win/sqlite.vsix 030f3eeaf2cb811a3692ab9c14d021a75ce41fff
|
||||||
P e00f37e2333cac5b53e17cf764ab56c4fcd5f617
|
P e50ff39a93a51b5a5be4f0e82a76104b81c9e2a4
|
||||||
R f4a7260efd0973fe242850b07fa047a9
|
R 5bf1150c318417a348672020b2f63094
|
||||||
U drh
|
U drh
|
||||||
Z 2c603ffc4b31451da49fbf26e09993c0
|
Z 1b9c31d5f496c5b0319085d207729750
|
||||||
|
@@ -1 +1 @@
|
|||||||
e50ff39a93a51b5a5be4f0e82a76104b81c9e2a4
|
bc5febef921bd12ca7760e9d07d3be0e67140320
|
19
src/pager.c
19
src/pager.c
@@ -1038,8 +1038,8 @@ static int subjRequiresPage(PgHdr *pPg){
|
|||||||
/*
|
/*
|
||||||
** Return true if the page is already in the journal file.
|
** Return true if the page is already in the journal file.
|
||||||
*/
|
*/
|
||||||
static int pageInJournal(PgHdr *pPg){
|
static int pageInJournal(Pager *pPager, PgHdr *pPg){
|
||||||
return sqlite3BitvecTest(pPg->pPager->pInJournal, pPg->pgno);
|
return sqlite3BitvecTest(pPager->pInJournal, pPg->pgno);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -4335,7 +4335,7 @@ static int subjournalPage(PgHdr *pPg){
|
|||||||
assert( isOpen(pPager->jfd) || pagerUseWal(pPager) );
|
assert( isOpen(pPager->jfd) || pagerUseWal(pPager) );
|
||||||
assert( isOpen(pPager->sjfd) || pPager->nSubRec==0 );
|
assert( isOpen(pPager->sjfd) || pPager->nSubRec==0 );
|
||||||
assert( pagerUseWal(pPager)
|
assert( pagerUseWal(pPager)
|
||||||
|| pageInJournal(pPg)
|
|| pageInJournal(pPager, pPg)
|
||||||
|| pPg->pgno>pPager->dbOrigSize
|
|| pPg->pgno>pPager->dbOrigSize
|
||||||
);
|
);
|
||||||
rc = openSubJournal(pPager);
|
rc = openSubJournal(pPager);
|
||||||
@@ -5636,9 +5636,9 @@ int sqlite3PagerBegin(Pager *pPager, int exFlag, int subjInMemory){
|
|||||||
** of any open savepoints as appropriate.
|
** of any open savepoints as appropriate.
|
||||||
*/
|
*/
|
||||||
static int pager_write(PgHdr *pPg){
|
static int pager_write(PgHdr *pPg){
|
||||||
void *pData = pPg->pData;
|
|
||||||
Pager *pPager = pPg->pPager;
|
Pager *pPager = pPg->pPager;
|
||||||
int rc = SQLITE_OK;
|
int rc = SQLITE_OK;
|
||||||
|
int inJournal;
|
||||||
|
|
||||||
/* This routine is not called unless a write-transaction has already
|
/* This routine is not called unless a write-transaction has already
|
||||||
** been started. The journal file may or may not be open at this point.
|
** been started. The journal file may or may not be open at this point.
|
||||||
@@ -5674,7 +5674,8 @@ static int pager_write(PgHdr *pPg){
|
|||||||
** to the journal then we can return right away.
|
** to the journal then we can return right away.
|
||||||
*/
|
*/
|
||||||
sqlite3PcacheMakeDirty(pPg);
|
sqlite3PcacheMakeDirty(pPg);
|
||||||
if( pageInJournal(pPg) && (pPager->nSavepoint==0 || !subjRequiresPage(pPg)) ){
|
inJournal = pageInJournal(pPager, pPg);
|
||||||
|
if( inJournal && (pPager->nSavepoint==0 || !subjRequiresPage(pPg)) ){
|
||||||
assert( !pagerUseWal(pPager) );
|
assert( !pagerUseWal(pPager) );
|
||||||
}else{
|
}else{
|
||||||
|
|
||||||
@@ -5682,7 +5683,7 @@ static int pager_write(PgHdr *pPg){
|
|||||||
** EXCLUSIVE lock on the main database file. Write the current page to
|
** EXCLUSIVE lock on the main database file. Write the current page to
|
||||||
** the transaction journal if it is not there already.
|
** the transaction journal if it is not there already.
|
||||||
*/
|
*/
|
||||||
if( !pageInJournal(pPg) && !pagerUseWal(pPager) ){
|
if( !inJournal && !pagerUseWal(pPager) ){
|
||||||
assert( pagerUseWal(pPager)==0 );
|
assert( pagerUseWal(pPager)==0 );
|
||||||
if( pPg->pgno<=pPager->dbOrigSize && isOpen(pPager->jfd) ){
|
if( pPg->pgno<=pPager->dbOrigSize && isOpen(pPager->jfd) ){
|
||||||
u32 cksum;
|
u32 cksum;
|
||||||
@@ -5695,7 +5696,7 @@ static int pager_write(PgHdr *pPg){
|
|||||||
assert( pPg->pgno!=PAGER_MJ_PGNO(pPager) );
|
assert( pPg->pgno!=PAGER_MJ_PGNO(pPager) );
|
||||||
|
|
||||||
assert( pPager->journalHdr<=pPager->journalOff );
|
assert( pPager->journalHdr<=pPager->journalOff );
|
||||||
CODEC2(pPager, pData, pPg->pgno, 7, return SQLITE_NOMEM, pData2);
|
CODEC2(pPager, pPg->pData, pPg->pgno, 7, return SQLITE_NOMEM, pData2);
|
||||||
cksum = pager_cksum(pPager, (u8*)pData2);
|
cksum = pager_cksum(pPager, (u8*)pData2);
|
||||||
|
|
||||||
/* Even if an IO or diskfull error occurs while journalling the
|
/* Even if an IO or diskfull error occurs while journalling the
|
||||||
@@ -5747,7 +5748,7 @@ static int pager_write(PgHdr *pPg){
|
|||||||
** the statement journal format differs from the standard journal format
|
** the statement journal format differs from the standard journal format
|
||||||
** in that it omits the checksums and the header.
|
** in that it omits the checksums and the header.
|
||||||
*/
|
*/
|
||||||
if( subjRequiresPage(pPg) ){
|
if( pPager->nSavepoint>0 && subjRequiresPage(pPg) ){
|
||||||
rc = subjournalPage(pPg);
|
rc = subjournalPage(pPg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -6749,7 +6750,7 @@ int sqlite3PagerMovepage(Pager *pPager, DbPage *pPg, Pgno pgno, int isCommit){
|
|||||||
if( (pPg->flags&PGHDR_NEED_SYNC) && !isCommit ){
|
if( (pPg->flags&PGHDR_NEED_SYNC) && !isCommit ){
|
||||||
needSyncPgno = pPg->pgno;
|
needSyncPgno = pPg->pgno;
|
||||||
assert( pPager->journalMode==PAGER_JOURNALMODE_OFF ||
|
assert( pPager->journalMode==PAGER_JOURNALMODE_OFF ||
|
||||||
pageInJournal(pPg) || pPg->pgno>pPager->dbOrigSize );
|
pageInJournal(pPager, pPg) || pPg->pgno>pPager->dbOrigSize );
|
||||||
assert( pPg->flags&PGHDR_DIRTY );
|
assert( pPg->flags&PGHDR_DIRTY );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user