From 5f5a2d1c3c26554758782cf6c047bda6eca4d8f3 Mon Sep 17 00:00:00 2001 From: drh Date: Mon, 29 May 2017 14:57:23 +0000 Subject: [PATCH 1/2] Avoid unnecessary calls to fstat() to determine the database file size. FossilOrigin-Name: c733a1dea37e4678e7bd0d3d0ca9b8eae1fbdc28615f75d8f1e5141aa53567d9 --- manifest | 15 +++++++++------ manifest.uuid | 2 +- src/pager.c | 13 ++++--------- 3 files changed, 14 insertions(+), 16 deletions(-) diff --git a/manifest b/manifest index 563124269d..4ff4f00aa2 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\sa\stypo\sin\sa\scomment.\s\sNo\scode\schanges. -D 2017-05-29T14:30:46.634 +C Avoid\sunnecessary\scalls\sto\sfstat()\sto\sdetermine\sthe\sdatabase\sfile\ssize. +D 2017-05-29T14:57:23.932 F Makefile.in 1cc758ce3374a32425e4d130c2fe7b026b20de5b8843243de75f087c0a2661fb F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434 F Makefile.msc 8eeb80162074004e906b53d7340a12a14c471a83743aab975947e95ce061efcc @@ -391,7 +391,7 @@ F src/os_setup.h 0dbaea40a7d36bf311613d31342e0b99e2536586 F src/os_unix.c 30e2c43e4955db990e5b5a81e901f8aa74cc8820 F src/os_win.c 2a6c73eef01c51a048cc4ddccd57f981afbec18a F src/os_win.h 7b073010f1451abe501be30d12f6bc599824944a -F src/pager.c b9e2eac73c63ecb208ed56ce4db30d3ac70d367814a1d55108c1d15805a3e59d +F src/pager.c a656a65be35c03b20513017a2d45c90721ce1de549115d3c524f204603b6c58c F src/pager.h f2a99646c5533ffe11afa43e9e0bea74054e4efa F src/parse.y 0513387ce02fea97897d8caef82d45f347818593f24f1bdc48e0c530a8af122d F src/pcache.c 62835bed959e2914edd26afadfecce29ece0e870 @@ -1581,7 +1581,10 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 6854a34ed708259f2280f7ee56cec09f7fc99810dc739dc2814ddeae286aa2c4 -R 51f95c83705d5e49164e8a8e656ed857 +P cb29b838886769afe866b1172e3d5d7e36387149b79c51f91cf59da3f4a5f25b +R bc8c78eb6e446da4e629bd6e66214ab1 +T *branch * io-opt +T *sym-io-opt * +T -sym-trunk * U drh -Z ba73033214a9ed109f3bb3430dcbffef +Z 5a21d8f44598546293f21185a73b0f86 diff --git a/manifest.uuid b/manifest.uuid index f4be47a677..1d262da355 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -cb29b838886769afe866b1172e3d5d7e36387149b79c51f91cf59da3f4a5f25b \ No newline at end of file +c733a1dea37e4678e7bd0d3d0ca9b8eae1fbdc28615f75d8f1e5141aa53567d9 \ No newline at end of file diff --git a/src/pager.c b/src/pager.c index cdc5751e81..c2c97d42f8 100644 --- a/src/pager.c +++ b/src/pager.c @@ -5263,19 +5263,14 @@ int sqlite3PagerSharedLock(Pager *pPager){ ** detected. The chance of an undetected change is so small that ** it can be neglected. */ - Pgno nPage = 0; char dbFileVers[sizeof(pPager->dbFileVers)]; - rc = pagerPagecount(pPager, &nPage); - if( rc ) goto failed; - - if( nPage>0 ){ - IOTRACE(("CKVERS %p %d\n", pPager, sizeof(dbFileVers))); - rc = sqlite3OsRead(pPager->fd, &dbFileVers, sizeof(dbFileVers), 24); - if( rc!=SQLITE_OK && rc!=SQLITE_IOERR_SHORT_READ ){ + IOTRACE(("CKVERS %p %d\n", pPager, sizeof(dbFileVers))); + rc = sqlite3OsRead(pPager->fd, &dbFileVers, sizeof(dbFileVers), 24); + if( rc!=SQLITE_OK ){ + if( rc!=SQLITE_IOERR_SHORT_READ ){ goto failed; } - }else{ memset(dbFileVers, 0, sizeof(dbFileVers)); } From 77f6af2b9600a30936abf9901a813f08e0c1056c Mon Sep 17 00:00:00 2001 From: drh Date: Mon, 29 May 2017 16:45:45 +0000 Subject: [PATCH 2/2] Avoid unnecessary fstat() calls to determine the database size when transitioning into a read transaction on a rollback-mode database. FossilOrigin-Name: 6c3476b513965df22d648f9a1b99733af753b44d51163cc7d42a69bf562300e1 --- manifest | 15 ++++++--------- manifest.uuid | 2 +- src/pager.c | 28 +++++++++++++--------------- 3 files changed, 20 insertions(+), 25 deletions(-) diff --git a/manifest b/manifest index 4ff4f00aa2..a0f87bf4e5 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Avoid\sunnecessary\scalls\sto\sfstat()\sto\sdetermine\sthe\sdatabase\sfile\ssize. -D 2017-05-29T14:57:23.932 +C Avoid\sunnecessary\sfstat()\scalls\sto\sdetermine\sthe\sdatabase\ssize\swhen\ntransitioning\sinto\sa\sread\stransaction\son\sa\srollback-mode\sdatabase. +D 2017-05-29T16:45:45.492 F Makefile.in 1cc758ce3374a32425e4d130c2fe7b026b20de5b8843243de75f087c0a2661fb F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434 F Makefile.msc 8eeb80162074004e906b53d7340a12a14c471a83743aab975947e95ce061efcc @@ -391,7 +391,7 @@ F src/os_setup.h 0dbaea40a7d36bf311613d31342e0b99e2536586 F src/os_unix.c 30e2c43e4955db990e5b5a81e901f8aa74cc8820 F src/os_win.c 2a6c73eef01c51a048cc4ddccd57f981afbec18a F src/os_win.h 7b073010f1451abe501be30d12f6bc599824944a -F src/pager.c a656a65be35c03b20513017a2d45c90721ce1de549115d3c524f204603b6c58c +F src/pager.c 14f6982c470c05b8e85575c69e9c1712010602e20400f8670d8699e21283e0e4 F src/pager.h f2a99646c5533ffe11afa43e9e0bea74054e4efa F src/parse.y 0513387ce02fea97897d8caef82d45f347818593f24f1bdc48e0c530a8af122d F src/pcache.c 62835bed959e2914edd26afadfecce29ece0e870 @@ -1581,10 +1581,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P cb29b838886769afe866b1172e3d5d7e36387149b79c51f91cf59da3f4a5f25b -R bc8c78eb6e446da4e629bd6e66214ab1 -T *branch * io-opt -T *sym-io-opt * -T -sym-trunk * +P c733a1dea37e4678e7bd0d3d0ca9b8eae1fbdc28615f75d8f1e5141aa53567d9 +R 305c14b2512f47cedccd7e2033ab5eaa U drh -Z 5a21d8f44598546293f21185a73b0f86 +Z e2a7cd050c361ca9085d24d8c34886c7 diff --git a/manifest.uuid b/manifest.uuid index 1d262da355..e224b6b0b6 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -c733a1dea37e4678e7bd0d3d0ca9b8eae1fbdc28615f75d8f1e5141aa53567d9 \ No newline at end of file +6c3476b513965df22d648f9a1b99733af753b44d51163cc7d42a69bf562300e1 \ No newline at end of file diff --git a/src/pager.c b/src/pager.c index c2c97d42f8..aee50e5318 100644 --- a/src/pager.c +++ b/src/pager.c @@ -3304,23 +3304,21 @@ static int pagerOpenWalIfPresent(Pager *pPager){ if( !pPager->tempFile ){ int isWal; /* True if WAL file exists */ - Pgno nPage; /* Size of the database file */ - - rc = pagerPagecount(pPager, &nPage); - if( rc ) return rc; - if( nPage==0 ){ - rc = sqlite3OsDelete(pPager->pVfs, pPager->zWal, 0); - if( rc==SQLITE_IOERR_DELETE_NOENT ) rc = SQLITE_OK; - isWal = 0; - }else{ - rc = sqlite3OsAccess( - pPager->pVfs, pPager->zWal, SQLITE_ACCESS_EXISTS, &isWal - ); - } + rc = sqlite3OsAccess( + pPager->pVfs, pPager->zWal, SQLITE_ACCESS_EXISTS, &isWal + ); if( rc==SQLITE_OK ){ if( isWal ){ - testcase( sqlite3PcachePagecount(pPager->pPCache)==0 ); - rc = sqlite3PagerOpenWal(pPager, 0); + Pgno nPage; /* Size of the database file */ + + rc = pagerPagecount(pPager, &nPage); + if( rc ) return rc; + if( nPage==0 ){ + rc = sqlite3OsDelete(pPager->pVfs, pPager->zWal, 0); + }else{ + testcase( sqlite3PcachePagecount(pPager->pPCache)==0 ); + rc = sqlite3PagerOpenWal(pPager, 0); + } }else if( pPager->journalMode==PAGER_JOURNALMODE_WAL ){ pPager->journalMode = PAGER_JOURNALMODE_DELETE; }