> Perhaps using async VFS mode would better suit Yoni's application? > > http://www.sqlite.org/asyncvfs.html
>From my experience asyncVFS is not suitable for applications with high throughput expecting high performance, because with big load and big writeback queue asyncVFS consumes a lot of CPU for each reading from file (it scans through the whole queue on each request to read, lock or unlock database file) which I guess generally slows down each query significantly (apart from causing a big CPU load). Such application needs custom VFS designed specifically for its needs (e.g. you can eliminate actual locking/unlocking of database file - it gives pretty significant benefit but again at the price of never be able to connect to database while your application is running). Also this custom VFS can be coupled with custom PCache to get some additional perks: e.g. VFS can schedule every write to background thread and tell PCache that whatever SQLite says it shouldn't evict this page until it's written to disk. This way you'll be able to write everything in background without causing additional pressure on queries - all pages they need are either in the cache or were not changed recently and are not in VFS background queue. Of course such system will corrupt database immediately if application exits/crashes with non-empty background queue. Also such system has danger of going out of memory in case of too big throughput, so it needs to have additional guards for that. Pavel On Fri, Dec 10, 2010 at 10:05 AM, Christian Smith <csm...@thewrongchristian.org.uk> wrote: > On Fri, Dec 10, 2010 at 09:49:46AM -0500, Pavel Ivanov wrote: >> > Given that the WAL index is mmap'ed, you're unlikely to see improvement >> > in performance by storing it in heap memory. Reads/writes will go at >> > main memory speeds once mapped into your address space, and under memory >> > pressure, it will be no slower than if the heap was pushed to the swapfile. >> >> Still I think pushing actual memory to swap file has bigger memory >> pressure threshold than pushing cache pages that are backed by actual >> file data out of physical memory. Also writing to mmaped file will >> still force OS to write it to disk from time to time and that brings >> additional pressure on the system overall. >> > > Once you're pushing working memory to disk, you've basically lost the > performance battle either way. > > Given the OP problem, it doesn't sound like memory is the limiting > factor anyway. > > From the past posts, it appears Yoni is after predictable performance > with high throughput (logging system?) but without the durability > gaurantees provided by SQLite by default. > > Perhaps using async VFS mode would better suit Yoni's application? > > http://www.sqlite.org/asyncvfs.html > > This way, the foreground thread handles writes to the SQLite IO queue, > and the background SQLite IO thread handles any latencies that result > from the commits. Yoni's already mentioned in other threads that > durability is not the main priority. > > I'm not sure how this async VFS fits in with WAL. Might be that normal > rollback journalling only is supported, but from a performance > standpoint, that's probably not a problem. > > Christian > _______________________________________________ > sqlite-users mailing list > sqlite-users@sqlite.org > http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users > _______________________________________________ sqlite-users mailing list sqlite-users@sqlite.org http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users