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
Dan.
_______________________________________________
sqlite-users mailing list
[email protected]
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users