Dan,

Thanks for looking into this.  So I get the notion of explicit scheduling
with lsm_work, but as I currently understand the sqlite4 API, explicit
scheduling can't be done with a sqlite4 database object.  Is that correct?

Rob


On Thu, Mar 28, 2013 at 2:02 PM, Dan Kennedy <[email protected]> wrote:

> On 03/19/2013 01:18 AM, Rob Turpin wrote:
>
>> It's a simple table, primary key is an integer, with another column which
>> is integer.  Although I do begin a transaction, do 1000 updates and then
>> commit.
>>
>> On Mon, Mar 18, 2013 at 11:36 AM, Dan Kennedy <[email protected]>
>> wrote:
>>
>>  On 03/19/2013 12:28 AM, Rob Turpin wrote:
>>>
>>>  I was running some performance tests for both sqlite3 and sqlite4 and
>>>> have
>>>> a question about a difference in my  numbers.
>>>>
>>>> I'm running these on a Linux machine, so I enabled fdatasync for the
>>>> sqlite3 build.
>>>>
>>>> I'm measuring the number of updates I can perform (updates per second),
>>>> here are the numbers.
>>>>
>>>> sqlite3:
>>>> Updates (CPU): 156250
>>>> Updates (Clock): 27733.6
>>>>
>>>> sqlite4:
>>>> Updates (CPU): 46729
>>>> Updates (Clock): 33132.8
>>>>
>>>>
>>>> With sqlite3 there's a large difference between the CPU time and wall
>>>> clock
>>>> time.  No big deal, that's the I/O to disk.  But then I'm wondering why
>>>> the
>>>> difference with sqlite4 is so small?
>>>>
>>>
> So I tried a test using db schema:
>
>   CREATE TABLE t1(k INTEGER PRIMARY KEY, v INTEGER);
>
> Initially the db is populated with 100,000 rows. Keys are
> contiguous integers starting with 1 and values are pseudo-random
> positive integers smaller than 2^32.
>
> Then run 100,000 statements of the form:
>
>   UPDATE t1 SET v = randomval() WHERE k = ?
>
> with a BEGIN/COMMIT block around each 1000 UPDATEs.
>
> With sqlite3, I get:
>
>   real    0m16.190s
>   user    0m0.620s
>   sys     0m0.552s
>
> And with sqlite4:
>
>   real    0m1.966s
>   user    0m1.424s
>   sys     0m0.000s
>
> On a 64-bit Linux host with synchronous=NORMAL and journal_mode=WAL.
> sqlite3 built with -Dfdatasync=fdatasync.
>
> So sqlite4 is using more CPU. But in this particular case is faster
> overall because the way the database file is written is more efficient
> (i.e. more sequential). It's probably writing a bit less too.
>
> One way to reduce the (perceived) CPU usage with sqlite4 is to move
> segment merges (database work) and database syncs (database checkpoints)
> to a background thread or process. Maybe we should have some way to
> make doing that easy for applications. More detail in the following,
> especially 6.1 and 6.3:
>
>   http://www.sqlite.org/src4/**doc/trunk/www/lsmusr.wiki#**
> performance_tuning<http://www.sqlite.org/src4/doc/trunk/www/lsmusr.wiki#performance_tuning>
>
> Dan.
>
>
>
>
> ______________________________**_________________
> sqlite-users mailing list
> [email protected]
> http://sqlite.org:8080/cgi-**bin/mailman/listinfo/sqlite-**users<http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users>
>
_______________________________________________
sqlite-users mailing list
[email protected]
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to