From: drh Date: Thu, 4 Apr 2013 00:40:17 +0000 (+0000) Subject: Try to use mmap() to speed access to the database file on windows, linux, X-Git-Tag: version-3.7.17~114 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=a478b3fa8034302ab417dcec4ea7eae0980862bc;p=thirdparty%2Fsqlite.git Try to use mmap() to speed access to the database file on windows, linux, and mac. FossilOrigin-Name: fff2be60779571c8fb89158db976ec3755e9a223 --- a478b3fa8034302ab417dcec4ea7eae0980862bc diff --cc manifest index dce40a05fc,1dc8e386cc..ebd18074c8 --- a/manifest +++ b/manifest @@@ -1,12 -1,12 +1,12 @@@ - C If\sthe\sSQLITE_TRACE_SIZE_LIMIT\scompile-time\sparameter\sis\sset\sto\sa\spositive\ninteger\sthen\slimit\sthe\sexpansion\sof\sstrings\sand\sblobs\sin\strace\soutput\sto\napproximately\sthat\smany\sbytes. - D 2013-04-02T13:56:53.795 -C Release\sresources\sprior\sto\sbailing\sout\sof\sthe\sbtreeCreateTable()\sroutine\nfollowing\san\sOOM\serror. -D 2013-04-03T21:23:28.794 ++C Try\sto\suse\smmap()\sto\sspeed\saccess\sto\sthe\sdatabase\sfile\son\swindows,\slinux,\nand\smac. ++D 2013-04-04T00:40:17.148 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f -F Makefile.in df3e48659d80e1b7765785d8d66c86b320f72cc7 +F Makefile.in aafa71d66bab7e87fb2f348152340645f79f0244 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23 -F Makefile.msc 0c1abc21c8deefc88e8a32ad6a07e5f96e158761 -F Makefile.vxworks b18ad88e9a8c6a001f5cf4a389116a4f1a7ab45f +F Makefile.msc 9ab787d472c9cb8bad29c2c4aeba15b06fba7bc4 +F Makefile.vxworks db21ed42a01d5740e656b16f92cb5d8d5e5dd315 F README cd04a36fbc7ea56932a4052d7d0b7f09f27c33d6 -F VERSION 6d4f66eaebabc42ef8c2a4d2d0caf4ce7ee81137 +F VERSION 05604ccde96fe1b37f922eddbdcb5654308261db F aclocal.m4 a5c22d164aff7ed549d53a90fa56d56955281f50 F addopcodes.awk 17dc593f791f874d2c23a0f9360850ded0286531 F art/sqlite370.eps aa97a671332b432a54e1d74ff5e8775be34200c2 @@@ -118,11 -118,11 +118,11 @@@ F src/alter.c f8db986c03eb0bfb221523fc9 F src/analyze.c d5f895810e8ff9737c9ec7b76abc3dcff5860335 F src/attach.c 1816f5a9eea8d2010fc2b22b44f0f63eb3a62704 F src/auth.c 523da7fb4979469955d822ff9298352d6b31de34 - F src/backup.c b2cac9f7993f3f9588827b824b1501d0c820fa68 + F src/backup.c b266767351ae2d847716c56fcb2a1fea7c761c03 F src/bitvec.c 19a4ba637bd85f8f63fc8c9bae5ade9fb05ec1cb F src/btmutex.c 976f45a12e37293e32cae0281b15a21d48a8aaa7 - F src/btree.c 62ba5954765efc711c873a20a53f60d9fc2843ba - F src/btree.h 3ad7964d6c5b1c7bff569aab6adfa075f8bf06cd -F src/btree.c 58c4d68415ca7b13a501b682a9c0ad1e287bcacb ++F src/btree.c 5f2c4fe72f663bba837c5d01a732799c1d1c93f8 + F src/btree.h d9490cd37aaeb530a41b07f06e1262950b1be916 F src/btreeInt.h eecc84f02375b2bb7a44abbcbbe3747dde73edb2 F src/build.c 083da8466fd7e481cb8bd5264398f537507f6176 F src/callback.c d7e46f40c3cf53c43550b7da7a1d0479910b62cc @@@ -157,18 -157,18 +157,18 @@@ F src/mutex_noop.c 7682796b7d8d39bf1c13 F src/mutex_unix.c c3a4e00f96ba068a8dbef34084465979aaf369cc F src/mutex_w32.c 32a9b3841e2d757355f0012b860b1bc5e01eafa0 F src/notify.c 976dd0f6171d4588e89e874fcc765e92914b6d30 - F src/os.c e1acdc09ff3ac2412945cca9766e2dcf4675f31c - F src/os.h 027491c77d2404c0a678bb3fb06286f331eb9b57 + F src/os.c 809d0707cec693e1b9b376ab229271ad74c3d35d + F src/os.h ae08bcc5f6ec6b339f4a2adf3931bb88cc14c3e4 F src/os_common.h 92815ed65f805560b66166e3583470ff94478f04 - F src/os_unix.c 21a36fa0b3753609b6606b30d9338d4bb6b24696 - F src/os_win.c 9fe5356f943425ab8431237bd3a4297044928b70 - F src/pager.c 3e9a15939684b0af441325f05335331b15979c9d - F src/pager.h 1109a06578ec5574dc2c74cf8d9f69daf36fe3e0 + F src/os_unix.c f0ecce40d92469d5cc737ae883e776eb3e5c0af5 -F src/os_win.c 1d0ccc1880b626ac2b6868284f6338c90687e8d8 ++F src/os_win.c 3265df8c762e0b8caf8d02b3352fa8c22e91ae6b + F src/pager.c 2e68df46d4086027cb6b527d47a6dedbf1a6b7ec + F src/pager.h 5cb78b8e1adfd5451e600be7719f5a99d87ac3b1 F src/parse.y 5d5e12772845805fdfeb889163516b84fbb9ae95 F src/pcache.c f8043b433a57aba85384a531e3937a804432a346 - F src/pcache.h 1b5dcc3dc8103d03e625b177023ee67764fa6b7c + F src/pcache.h a5e4f5d9f5d592051d91212c5949517971ae6222 F src/pcache1.c 9fd22671c270b35131ef480bbc00392b8b5f8ab9 - F src/pragma.c 9f0ee3d74a7f33eeeff40a4b014fc3abf8182ce2 + F src/pragma.c 682e97f3e3b77fd6c9b569eabfbf4a14c987aca3 F src/prepare.c 310eaff1ee5f3c700b3545afb095cfe9346efc3a F src/printf.c 4a9f882f1c1787a8b494a2987765acf9d97ac21f F src/random.c cd4a67b3953b88019f8cd4ccd81394a8ddfaba50 @@@ -247,12 -247,12 +247,12 @@@ F src/vdbeaux.c ecb43014bcd3019e5aa2b55 F src/vdbeblob.c 32f2a4899d67f69634ea4dd93e3f651936d732cb F src/vdbemem.c 833005f1cbbf447289f1973dba2a0c2228c7b8ab F src/vdbesort.c 4fad64071ae120c25f39dcac572d716b9cadeb7f -F src/vdbetrace.c 8bd5da325fc90f28464335e4cc4ad1407fe30835 +F src/vdbetrace.c a22263ab47f6ba4fcd176515cec1e732866b25f0 F src/vtab.c b05e5f1f4902461ba9f5fc49bb7eb7c3a0741a83 - F src/wal.c f5c7b5027d0ed0e9bc9afeb4a3a8dfea762ec7d2 - F src/wal.h 29c197540b19044e6cd73487017e5e47a1d3dac6 + F src/wal.c 94b5fed2df988fb12f5bf17256e2840e56957a85 + F src/wal.h a4d3da523d55a226a0b28e9058ef88d0a8051887 F src/walker.c 3d75ba73de15e0f8cd0737643badbeb0e002f07b -F src/where.c 9a16c0b84bbeb054d11fda96e9e037ae310bd54e +F src/where.c 4ad2329c439a30ddb915a780f6f80bdffafe3a64 F test/8_3_names.test 631ea964a3edb091cf73c3b540f6bcfdb36ce823 F test/aggerror.test a867e273ef9e3d7919f03ef4f0e8c0d2767944f2 F test/aggnested.test 45c0201e28045ad38a530b5a144b73cd4aa2cfd6 @@@ -630,6 -631,8 +631,8 @@@ F test/misc5.test 528468b26d03303b1f047 F test/misc6.test 953cc693924d88e6117aeba16f46f0bf5abede91 F test/misc7.test dd82ec9250b89178b96cd28b2aca70639d21e5b3 F test/misuse.test ba4fb5d1a6101d1c171ea38b3c613d0661c83054 + F test/mmap1.test df5105f08e6000e57b4de7e748f8c2ae3fed75da -F test/mmap2.test c0cbb978eda8d06d755ba8d9e59ec06ebf60c5cb ++F test/mmap2.test 62dbb5d718e66d654d232116c5a2d96e26a071a5 F test/multiplex.test e08cc7177bd6d85990ee1d71100bb6c684c02256 F test/multiplex2.test 580ca5817c7edbe4cc68fa150609c9473393003a F test/multiplex3.test d228f59eac91839a977eac19f21d053f03e4d101 @@@ -1041,7 -1042,7 +1044,7 @@@ F tool/vdbe-compress.tcl f12c884766bd14 F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4 F tool/warnings.sh fbc018d67fd7395f440c28f33ef0f94420226381 F tool/win/sqlite.vsix 97894c2790eda7b5bce3cc79cb2a8ec2fde9b3ac - P 5687e5ee7bafa00d2b353c3eda1e5dfb219cb185 - R b688b887865b3d8981922c40426941a0 -P f97d7274f48e3bb98ed17eae11abb55064134874 -R 133fe42d87ba7d3deff6d35af20e1f64 ++P e5b710849dd66673ba0e0d935b103cb29abfcc4b b2a72be9bab77f050bef75477a278a6294d3e854 ++R 60af9b4d9e73e7757090b3abb77cbb41 U drh - Z 66f86621cb15eccea274cb5b5e71ec26 -Z 8d00d860d2c818ad1f98631f4c1a926a ++Z d05e425b384f57133414b300483bca27 diff --cc manifest.uuid index ec266fb546,a6f66ce7d4..4f646cb565 --- a/manifest.uuid +++ b/manifest.uuid @@@ -1,1 -1,1 +1,1 @@@ - e5b710849dd66673ba0e0d935b103cb29abfcc4b -b2a72be9bab77f050bef75477a278a6294d3e854 ++fff2be60779571c8fb89158db976ec3755e9a223 diff --cc src/os_win.c index 58ba25f302,dc69b47ae2..a7966171b5 --- a/src/os_win.c +++ b/src/os_win.c @@@ -2781,6 -2836,12 +2836,12 @@@ static int winFileControl(sqlite3_file } return SQLITE_OK; } + case SQLITE_FCNTL_MMAP_LIMIT: { + i64 newLimit = *(i64*)pArg; - *(i64*) = pFile->mmapLimit; ++ *(i64*)pArg = pFile->mmapLimit; + if( newLimit>=0 ) pFile->mmapLimit = newLimit; + return SQLITE_OK; + } } return SQLITE_NOTFOUND; } diff --cc test/mmap2.test index 0000000000,fb36507efd..33830a6943 mode 000000,100644..100644 --- a/test/mmap2.test +++ b/test/mmap2.test @@@ -1,0 -1,83 +1,82 @@@ + # 2013 March 20 + # + # The author disclaims copyright to this source code. In place of + # a legal notice, here is a blessing: + # + # May you do good and not evil. + # May you find forgiveness for yourself and forgive others. + # May you share freely, never taking more than you give. + # + #*********************************************************************** + # + # This file tests the effect of the mmap() or mremap() system calls + # returning an error on the library. + # + # If either mmap() or mremap() fails, SQLite should log an error + # message, then continue accessing the database using read() and + # write() exclusively. + # + + set testdir [file dirname $argv0] + source $testdir/tester.tcl + set testprefix mmap2 + -if {[test_syscall defaultvfs] != "unix"} { ++if {$::tcl_platform(platform)!="unix" || [test_syscall defaultvfs] != "unix"} { + finish_test + return + } + + db close + sqlite3_shutdown + test_sqlite3_log xLog + proc xLog {error_code msg} { + if {[string match os_unix.c* $msg]} { + lappend ::log $msg + } + } + + foreach syscall {mmap mremap} { + test_syscall uninstall + if {[catch {test_syscall install $syscall}]} continue + + for {set i 1} {$i < 20} {incr i} { + reset_db + + test_syscall fault $i 1 + test_syscall errno $syscall ENOMEM + set ::log "" + + do_execsql_test 1.$syscall.$i.1 { + CREATE TABLE t1(a, b, UNIQUE(a, b)); + INSERT INTO t1 VALUES(randomblob(1000), randomblob(1000)); + INSERT INTO t1 SELECT randomblob(1000), randomblob(1000) FROM t1; + INSERT INTO t1 SELECT randomblob(1000), randomblob(1000) FROM t1; + INSERT INTO t1 SELECT randomblob(1000), randomblob(1000) FROM t1; + INSERT INTO t1 SELECT randomblob(1000), randomblob(1000) FROM t1; + INSERT INTO t1 SELECT randomblob(1000), randomblob(1000) FROM t1; + INSERT INTO t1 SELECT randomblob(1000), randomblob(1000) FROM t1; + } + + set nFail [test_syscall fault 0 0] + + do_execsql_test 1.$syscall.$i.2 { + SELECT count(*) FROM t1; + PRAGMA integrity_check; + } {64 ok} + + do_test 1.$syscall.$i.3 { + expr {$nFail==0 || $nFail==1} + } {1} + + do_test 1.$syscall.$i.4.nFail=$nFail { + regexp ".*${syscall}.*" $::log + } [expr $nFail>0] + } + } + + db close + test_syscall uninstall + sqlite3_shutdown + test_sqlite3_log + sqlite3_initialize + finish_test -