http://www.sqlite.org/pragma.html#pragma_page_size
Apparently changing the PAGE_SIZE pragma has a significant effect on the wc speed: % rm -rf d && time ( export _SVN_PRAGMA='PRAGMA page_size = 65536;'; echo $svn; $svn co -q file:///tmp/svn/r1 d && $svn pl -R d >/dev/null ) /home/daniel/src/svn/t1/subversion/svn/svn \ Time spent in user mode (CPU seconds) : 5.73ss Time spent in kernel mode (CPU seconds) : 14.11ss Total time : 28.70ss % rm -rf d && time ( export _SVN_PRAGMA='PRAGMA page_size = 65536;'; echo $svn; $svn co -q file:///tmp/svn/r1 d && $svn pl -R d >/dev/null ) /home/daniel/src/svn/t1/subversion/svn/svn \ Time spent in user mode (CPU seconds) : 5.86ss Time spent in kernel mode (CPU seconds) : 14.24ss Total time : 29.19ss % rm -rf d && time ( export _SVN_PRAGMA='PRAGMA page_size = 4096;'; echo $svn; $svn co -q file:///tmp/svn/r1 d && $svn pl -R d >/dev/null ) /home/daniel/src/svn/t1/subversion/svn/svn \ Time spent in user mode (CPU seconds) : 5.29ss Time spent in kernel mode (CPU seconds) : 5.44ss Total time : 20.56ss % rm -rf d && time ( export _SVN_PRAGMA='PRAGMA page_size = 4096;'; echo $svn; $svn co -q file:///tmp/svn/r1 d && $svn pl -R d >/dev/null ) /home/daniel/src/svn/t1/subversion/svn/svn \ Time spent in user mode (CPU seconds) : 4.82ss Time spent in kernel mode (CPU seconds) : 6.20ss Total time : 19.51ss % rm -rf d && time ( export _SVN_PRAGMA='PRAGMA page_size = 1024;'; echo $svn; $svn co -q file:///tmp/svn/r1 d && $svn pl -R d >/dev/null ) /home/daniel/src/svn/t1/subversion/svn/svn \ Time spent in user mode (CPU seconds) : 5.25ss Time spent in kernel mode (CPU seconds) : 5.30ss Total time : 19.06ss % rm -rf d && time ( export _SVN_PRAGMA='PRAGMA page_size = 1024;'; echo $svn; $svn co -q file:///tmp/svn/r1 d && $svn pl -R d >/dev/null ) /home/daniel/src/svn/t1/subversion/svn/svn \ Time spent in user mode (CPU seconds) : 5.00ss Time spent in kernel mode (CPU seconds) : 6.72ss Total time : 15.81ss (wc resides on /tmp ext3 partition, checkout is to /home ext3 partition on the same disk, using current trunk binaries, with the attached patch, using sqlite-3.7.3 from Debian. I've verified that the pragma took effect by running 'sqlite3 "pragma page_size;"' afterwards.) Now, obviously just using the 65k (the maximum) for the pragma isn't always a good idea; but should we make this configurable? I imagine that using, say, 4KB in some setups could have a noticeable difference.
Index: subversion/libsvn_subr/sqlite.c =================================================================== --- subversion/libsvn_subr/sqlite.c (revision 1244784) +++ subversion/libsvn_subr/sqlite.c (working copy) @@ -811,6 +811,10 @@ svn_sqlite__open(svn_sqlite__db_t **db, const char setting SQLITE_TEMP_STORE to 0 (always to disk) */ svn_error_clear(exec_sql(*db, "PRAGMA temp_store = MEMORY;")); + /* Testing */ + if (getenv("_SVN_PRAGMA")) + SVN_ERR(exec_sql(*db, getenv("_SVN_PRAGMA"))); + /* Store the provided statements. */ if (statements) {