As a side note: I've compiled some performance data and published them as an article on my blog:
http://manski.net/2012/10/01/sqlite-performance/ Do these result seem to be ok? - Sebastian On Mon, Sep 24, 2012 at 5:02 PM, Olaf Schmidt <s...@online.de> wrote: > Am 24.09.2012 11:26, schrieb Sebastian Krysmanski: > >> Ok, I tried that. It definitely improves performance when using a lot >> threads (15+)... >> > > So I take it, that your last posted result here was using a > shared cache (in case of the multiple connections): > > > ------------------------------**------------------------------**------ >> SELECT_COUNT: 133,333 >> THREAD_COUNT: 15 >> Testing with one connection (ReadWrite) and filled table... >> Elapsed: 12.3 s (162,647.6 stmt/sec) >> Testing with multiple connections (ReadWrite) and filled table... >> Elapsed: 12.7 s (157,324.1 stmt/sec) >> > > Whilst the following result (from an earlier of your replies), > was not using a shared cache (instead using separate caches > per thread in case of the multiple connections): > > > > ------------------------------**------------------------------**------ > > SELECT_COUNT: 133,333 > > THREAD_COUNT: 15 > > Testing with one connections (ReadWrite) and filled table... > > Elapsed: 9.5 s > > > Testing with multiple connections (ReadWrite) and filled table... > > Elapsed: 51.2 s > > Possible things which could explain that (because it differs from > my results considerably) are potentially: > 1. the setting for: PRAGMA read_uncommitted > 2. the implementation of the Busy-Handler > > Ok, just looking what my settings were for case 1... > and 'PRAGMA read_uncommitted' was at Zero, so this case > can be dumped I think. > > So I suspect the latter case ... > Which Busy-Handler do you use, the built-in one? > called up per: sqlite3_busy_timeout(sqlite3*, int ms) > > Or your own implementation? > > In my own BusyHandler (I'm dealing only with Windows here) > my first (few) "wait-fast" calls in the Busy-WaitLoop are always: > Sleep 0 > > which according to the MSDN: > > http://msdn.microsoft.com/en-**us/library/windows/desktop/** > ms686298(v=vs.85).aspx<http://msdn.microsoft.com/en-us/library/windows/desktop/ms686298(v=vs.85).aspx> > "relinquishs the remainder of the threads timeslice", but > will try to return as soon as possible in this case. > So, if you implement your own Handler (for Windows), > calling Sleep 0 first (a few times) may worth a try, > so that you give the pausing thread the chance, to > take up its work much earlier, in case the cause for > the blocking was only a really short one (on some > other thread). > > Also worth noting in this regard is, that the TimeSlice for > low values as e.g. > Sleep 1 > doesn't (always) send the thread sleeping for "exactly" 1 msec - > the time until the thread resumes its work depends in this > case (for such low values) on the settings which were > (only potentially) performed earlier with timeSetEvent... > > By default Windows has a "Tick-Interval" of about 12-15msec > (as the minimum-sleep-time for millisec-values > 0). > But this "Tick-Interval-granularity" is explained also in > the 'Remarks'-section of the MSDN-page for Sleep(). > > Olaf > > > > > ______________________________**_________________ > sqlite-users mailing list > sqlite-users@sqlite.org > http://sqlite.org:8080/cgi-**bin/mailman/listinfo/sqlite-**users<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