> Pavel, regarding the question about VFS, I'm not using one to my knowledge 
> and have set the "name of VFS module" to NULL in sqlite3_open_v2.  Maybe NULL 
> means I'm using the standard VFS, but in any case, not a "non-standard" one.

If you pass NULL you use _default_ VFS, not a standard one. When
non-standard VFS is registered it can be set to be default.

> Here are some more timings...

I'm out of ideas about this. I understand that it shouldn't work this
way and I don't understand why it does.
Is it possible for you to run application in some sort of profiler?
Obviously it should show that a lot of time is spent in waiting on
some mutex and it will be able to show where this mutex is held
from...


Pavel

On Tue, Mar 9, 2010 at 1:02 PM, Luke Evans <luk...@me.com> wrote:
> Hi guys,
>
> Had to take a break for a couple of days from my SQLite experiments, but back 
> on it now.
>
> Pavel, regarding the question about VFS, I'm not using one to my knowledge 
> and have set the "name of VFS module" to NULL in sqlite3_open_v2.  Maybe NULL 
> means I'm using the standard VFS, but in any case, not a "non-standard" one.
> I'm selecting from a real table.
>
> Here are some more timings...
>
> Shared cache ON.  6 of the same query issued (as before) within the 
> multithreaded scenario.  All the queries bunch up and report complete more or 
> less together.
>
> 2010-03-09 09:32:33.013 SQLiteTest[16208:a0f] SQLite says multithreading is ON
> 2010-03-09 09:32:33.015 SQLiteTest[16208:a0f] SQLite's multithreading value 
> is 2
> 2010-03-09 09:32:33.015 SQLiteTest[16208:a0f] SHARED CACHE IS ON
> 2010-03-09 09:32:33.017 SQLiteTest[16208:1b03] Starting query on thread 
> <NSThread: 0x10061e450>{name = (null), num = 3}
> 2010-03-09 09:32:33.018 SQLiteTest[16208:5603] Starting query on thread 
> <NSThread: 0x117e071c0>{name = (null), num = 4}
> 2010-03-09 09:32:33.017 SQLiteTest[16208:4403] Starting query on thread 
> <NSThread: 0x117e06760>{name = (null), num = 2}
> 2010-03-09 09:32:33.018 SQLiteTest[16208:5503] Starting query on thread 
> <NSThread: 0x10061ea70>{name = (null), num = 5}
> 2010-03-09 09:32:33.019 SQLiteTest[16208:5703] Starting query on thread 
> <NSThread: 0x10061e5a0>{name = (null), num = 6}
> 2010-03-09 09:32:33.019 SQLiteTest[16208:5c03] Starting query on thread 
> <NSThread: 0x10061e680>{name = (null), num = 7}
> 2010-03-09 09:32:41.359 SQLiteTest[16208:5603] Finished query on thread 
> <NSThread: 0x117e071c0>{name = (null), num = 4} in 8.34s
> 2010-03-09 09:32:41.359 SQLiteTest[16208:1b03] Finished query on thread 
> <NSThread: 0x10061e450>{name = (null), num = 3} in 8.34s
> 2010-03-09 09:32:41.359 SQLiteTest[16208:4403] Finished query on thread 
> <NSThread: 0x117e06760>{name = (null), num = 2} in 8.34s
> 2010-03-09 09:32:41.359 SQLiteTest[16208:5503] Finished query on thread 
> <NSThread: 0x10061ea70>{name = (null), num = 5} in 8.34s
> 2010-03-09 09:32:41.360 SQLiteTest[16208:5703] Finished query on thread 
> <NSThread: 0x10061e5a0>{name = (null), num = 6} in 8.34s
> 2010-03-09 09:32:41.360 SQLiteTest[16208:5c03] Finished query on thread 
> <NSThread: 0x10061e680>{name = (null), num = 7} in 8.34s
> 2010-03-09 09:32:41.360 SQLiteTest[16208:a0f] Finished all queries in 8.34s
>
>
>
> 6 of the same query executed in separate processes.
> The query time is essentially the same as when you issue just a single query 
> in the 'multithreaded' configuration above - as one would expect.
>
> 2010-03-09 09:47:02.729 SQLiteTest[17083:a0f] SQLite says multithreading is ON
> 2010-03-09 09:47:02.731 SQLiteTest[17083:a0f] SQLite's multithreading value 
> is 2
> SHARED CACHE IS OFFRead uncommitted is 1
> SHARED CACHE IS OFFRead uncommitted is 1
> SHARED CACHE IS OFFRead uncommitted is 1
> SHARED CACHE IS OFFRead uncommitted is 1
> SHARED CACHE IS OFFRead uncommitted is 1
> SHARED CACHE IS OFFRead uncommitted is 1
> Cache size is 100000
> Page size is 32768
> Temp store is 2
> Synchronous is 0
> Cache size is 100000
> Page size is 32768
> Temp store is 2
> Synchronous is 0
> Cache size is 100000
> Page size is 32768
> Temp store is 2
> Synchronous is 0
> Cache size is 100000
> Page size is 32768
> Temp store is 2
> Synchronous is 0
> Cache size is 100000
> Page size is 32768
> Temp store is 2
> Synchronous is 0
> Cache size is 100000
> Page size is 32768
> Temp store is 2
> Synchronous is 0
> On pid 17089, 3717 rows read in approx 2s
> On pid 17088, 3717 rows read in approx 2s
> On pid 17093, 3717 rows read in approx 2s
> On pid 17090, 3717 rows read in approx 2s
> On pid 17091, 3717 rows read in approx 2s
> On pid 17092, 3717 rows read in approx 2s
> 2010-03-09 09:47:04.323 SQLiteTest[17083:a0f] Finished all queries in 1.59s
>
>
>
> Same as above (6 queries in separate processes), but now each process has 
> SHARED CACHE=ON.
> There's no significant difference in timing (within normal variance).
>
> 22010-03-09 09:49:41.217 SQLiteTest[17272:a0f] SQLite says multithreading is 
> ON
> 2010-03-09 09:49:41.219 SQLiteTest[17272:a0f] SQLite's multithreading value 
> is 2
> SHARED CACHE IS ONRead uncommitted is 1
> SHARED CACHE IS ONRead uncommitted is 1
> SHARED CACHE IS ONRead uncommitted is 1
> SHARED CACHE IS ONRead uncommitted is 1
> SHARED CACHE IS ONRead uncommitted is 1
> SHARED CACHE IS ONRead uncommitted is 1
> Cache size is 100000
> Cache size is 100000
> Page size is 32768
> Page size is 32768
> Temp store is 2
> Temp store is 2
> Synchronous is 0
> Synchronous is 0
> Cache size is 100000
> Page size is 32768
> Temp store is 2
> Synchronous is 0
> Cache size is 100000
> Page size is 32768
> Temp store is 2
> Synchronous is 0
> Cache size is 100000
> Page size is 32768
> Temp store is 2
> Synchronous is 0
> Cache size is 100000
> Page size is 32768
> Temp store is 2
> Synchronous is 0
> On pid 17278, 3717 rows read in approx 1s
> On pid 17281, 3717 rows read in approx 1s
> On pid 17280, 3717 rows read in approx 1s
> On pid 17277, 3717 rows read in approx 1s
> On pid 17276, 3717 rows read in approx 1s
> On pid 17279, 3717 rows read in approx 1s
> 2010-03-09 09:49:42.697 SQLiteTest[17272:a0f] Finished all queries in 1.48s
>
>
>
>
>
> On 2010-03-05, at 12:45 PM, Pavel Ivanov wrote:
>
>> Just a bit of thought here: if opening was at fault then 5 queries
>> started at the same time would finish in different times (first open
>> executes, then while first query executes second open can be executed,
>> then first query already executed while second is still in works etc).
>> So blocking delays are coming from somewhere inside and they should be
>> evenly spread over opening or execution of the query so that it could
>> guarantee nearly simultaneous finish of all 5 queries. The only things
>> that I can think now:
>> - I/O: either file system or VFS inside SQLite is implemented so that
>> every call to it acquires some global mutex.
>> - if query is actually made over the same virtual table and virtual
>> table implementation again acquires some global mutex for each call to
>> its functions.
>>
>> Luke, does any of these applies to your situation? Do you register any
>> non-standard VFS in SQLite? Do you select from real table or virtual
>> one? Could you also post timings with shared cache turned on and when
>> the same query is executed from different processes?
>>
>> Pavel
>>
>> On Fri, Mar 5, 2010 at 3:25 PM, Olaf Schmidt <s...@online.de> wrote:
>>>
>>> "Pavel Ivanov" <paiva...@gmail.com> schrieb im
>>> Newsbeitrag
>>> news:f3d9d2131003051131k23c7b61cueda0bcc72e6aa...@mail.gmail.com...
>>>
>>> Oops, pressed send unintentionally...
>>>
>>>>> Long story short - I suspect the open-call, to be the "blocker"
>>>>> in your "SharedCache-Mode=Off"-scenario.
>>>
>>>> If database file is pretty large, query reads a lot of data while
>>>> executing and all data read fit into database cache configured
>>>>  then I think I/O will be the main difference between "with-shared-
>>>> cache" and "without-shared-cache" scenarios.
>>>
>>> The rest of your reply was probably meant for Luke,
>>> but the statement above is from my post, so ...
>>>
>>> From his timing-results Luke clearly reports blocking
>>> behaviour with Shared-Cache=Off (although the blocking
>>> should only be reasonable with Shared-Cache=On) ...
>>> So, since everybody seems to agree about, that without
>>> Shared-Cache the blocking on sqlite3_step() should
>>> *not* happen - I suspect the open-calls (in each threaded
>>> request) to be the culprit.
>>>
>>> So, I don't mean my post with regards to the additional
>>> overhead from the open-call, doing its "real work" (schema-
>>> info-parsing and stuff) - instead from the results Luke has posted,
>>> I'd think, that there's an active mutex in the open-sequence-
>>> actions of SQLite, which prevents the parallelism.
>>>
>>> Olaf
>
> _______________________________________________
> 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