Sqlite is an ACID database - it ensures that data is written to disk, so 
a database in memory still shares a single disk resource.

Jim Wilcoxson wrote:
> I'm not sure what you are considering a massive slowdown, but let's
> assume that the entire database fits into memory and disk I/O isn't
> the bottleneck.  You said you're running 300 instances of the query on
> several processors.  If several means 3 CPUs, then in a perfect world,
> running 300 instances will be 100 times slower than running just 1.
> This assumes you are getting linear scalability, which no one ever
> does, so the slowdown will be more than 100x.  If you have 4
> processors, running 300 queries simultaneously should still be 75x
> slower (best case) than running 1.
>
> You also mentioned seeing a wide variance in response times.  This is
> typical, because most schedulers in multi-user systems won't perfectly
> distribute CPU time to 300 processes.  If the scheduler decides to run
> task 1 to completion, then task 2, etc., your last task will appear to
> take much longer than the first task.  For example, let's say that
> each task by itself takes 1 second of CPU time and zero I/O time,
> assuming the database is all in memory.  300 queries will take 300
> seconds to complete.  If the system scheduler runs each task, in
> order, to completion, then the first task will take 1 second and the
> last task will take 300 seconds to complete.  Wide variance.  Or, the
> system scheduler could decide to give each task 1/100th of a second.
> It will take 3 seconds for all tasks to get a timeslice.  In this
> scenario, it will still take 300 seconds to complete all 300 jobs, but
> they will complete within 1/100th of a second of each other, and each
> job will report that it took 300 seconds to complete.  No variance.
> The price you will pay for no variance is that you increase the
> multiprocessing overhead because now instead of doing just 300 task
> switches to execute each job to completion, you are doing 300x100 =
> 30,000 task switches.  Task switches aren't free, so the "no variance"
> schedule will take longer overall than the wide variance.  This is a
> classic fairness vs high throughput dilemma; you can't have both.
>
> If you are seeing something like 1000x slower performance, then as
> others have mentioned you could have a disk I/O or locking bottleneck.
>
> Jim
>
> On 5/6/09, Igor Tandetnik <itandet...@mvps.org> wrote:
>   
>> "Rosemary Alles" <al...@ipac.caltech.edu> wrote
>> in message news:af79a266-b697-4924-b304-2b1feccba...@ipac.caltech.edu
>>     
>>> Run on a single processor, the following query is quite fast:
>>>
>>> When concurrency is introduced (simply running the query on several
>>> processors against the same database - say 300 instances of it) causes
>>> a massive slow down
>>>       
>> Well, you may have multiple CPUs, but you only have a single hard drive.
>> That drive head can't be in multiple places simultaneously.
>>
>> Igor Tandetnik
>>
>>
>>
>> _______________________________________________
>> 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

Reply via email to