From 02342d4fcaedb59a604017ba51dfcd742d1384ec Mon Sep 17 00:00:00 2001 From: dan Date: Fri, 7 Aug 2015 09:42:12 +0000 Subject: [PATCH] Within a write-transaction on a wal database in mmap mode, check the page-cache for an entry before the wal file. This can be faster if the wal file is very large. FossilOrigin-Name: 3a82c8e6cb7227fe05e304c9550d0398404e0938 --- manifest | 17 ++++++++++------- manifest.uuid | 2 +- src/pager.c | 43 +++++++++++++++++++++---------------------- 3 files changed, 32 insertions(+), 30 deletions(-) diff --git a/manifest b/manifest index f50ad88829..5d3cbacb8d 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C increase\sthe\sversion\snumber\sto\s3.8.12 -D 2015-08-06T12:54:13.800 +C Within\sa\swrite-transaction\son\sa\swal\sdatabase\sin\smmap\smode,\scheck\sthe\spage-cache\sfor\san\sentry\sbefore\sthe\swal\sfile.\sThis\scan\sbe\sfaster\sif\sthe\swal\sfile\sis\svery\slarge. +D 2015-08-07T09:42:12.553 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f F Makefile.in 2fc9ca6bf5949d415801c007ed3004a4bdb7c380 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23 @@ -319,7 +319,7 @@ F src/os_setup.h c9d4553b5aaa6f73391448b265b89bed0b890faa F src/os_unix.c 388c023582b17890f10c980b30ec1922b471753b F src/os_win.c 40b3af7a47eb1107d0d69e592bec345a3b7b798a F src/os_win.h eb7a47aa17b26b77eb97e4823f20a00b8bda12ca -F src/pager.c aa916ca28606ccf4b6877dfc2b643ccbca86589f +F src/pager.c c22ef6b16fa89e648368ae089746eeb82bea7edd F src/pager.h 6d435f563b3f7fcae4b84433b76a6ac2730036e2 F src/parse.y 6d60dda8f8d418b6dc034f1fbccd816c459983a8 F src/pcache.c cde06aa50962595e412d497e22fd2e07878ba1f0 @@ -1370,7 +1370,10 @@ F tool/vdbe_profile.tcl 67746953071a9f8f2f668b73fe899074e2c6d8c1 F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4 F tool/warnings.sh 48bd54594752d5be3337f12c72f28d2080cb630b F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P 483ebe8989ed7dbe197fe84e3eef6e76fa828e14 -R 72d1d4236810d5582f0e880ecec0e435 -U drh -Z 8a021c02e13a3c92d09628068d66bcc9 +P e596a6b63f3a18c26352b1b3e67bb282fdec8055 +R f5613d53097ed5eefd891dfa83de9eb5 +T *branch * mmap-wal-bigtrans +T *sym-mmap-wal-bigtrans * +T -sym-trunk * +U dan +Z 06205d1f4e6cfd485fe91bd1df76aca8 diff --git a/manifest.uuid b/manifest.uuid index 324f248532..78ac639ec7 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -e596a6b63f3a18c26352b1b3e67bb282fdec8055 \ No newline at end of file +3a82c8e6cb7227fe05e304c9550d0398404e0938 \ No newline at end of file diff --git a/src/pager.c b/src/pager.c index 060edb8d1d..29bbd21531 100644 --- a/src/pager.c +++ b/src/pager.c @@ -5274,33 +5274,32 @@ int sqlite3PagerAcquire( if( pPager->errCode!=SQLITE_OK ){ rc = pPager->errCode; }else{ - if( bMmapOk && pagerUseWal(pPager) ){ - rc = sqlite3WalFindFrame(pPager->pWal, pgno, &iFrame); - if( rc!=SQLITE_OK ) goto pager_acquire_err; - } - - if( bMmapOk && iFrame==0 ){ - void *pData = 0; + if( bMmapOk ){ + if( pPager->eState>PAGER_READER ){ + pPg = sqlite3PagerLookup(pPager, pgno); + } - rc = sqlite3OsFetch(pPager->fd, - (i64)(pgno-1) * pPager->pageSize, pPager->pageSize, &pData - ); + if( pPg==0 && pagerUseWal(pPager) ){ + rc = sqlite3WalFindFrame(pPager->pWal, pgno, &iFrame); + if( rc!=SQLITE_OK ) goto pager_acquire_err; + } - if( rc==SQLITE_OK && pData ){ - if( pPager->eState>PAGER_READER ){ - pPg = sqlite3PagerLookup(pPager, pgno); - } - if( pPg==0 ){ + if( pPg==0 && iFrame==0 ){ + void *pData = 0; + rc = sqlite3OsFetch(pPager->fd, + (i64)(pgno-1) * pPager->pageSize, pPager->pageSize, &pData + ); + if( rc==SQLITE_OK && pData ){ rc = pagerAcquireMapPage(pPager, pgno, pData, &pPg); - }else{ - sqlite3OsUnfetch(pPager->fd, (i64)(pgno-1)*pPager->pageSize, pData); - } - if( pPg ){ - assert( rc==SQLITE_OK ); - *ppPage = pPg; - return SQLITE_OK; } } + + if( pPg ){ + assert( rc==SQLITE_OK ); + *ppPage = pPg; + return SQLITE_OK; + } + if( rc!=SQLITE_OK ){ goto pager_acquire_err; } -- 2.47.2