Hi all,

   I'm working on a project that makes massively usage of SQL  
statements with many inserts/selects. It's a multi-threaded process  
that shares a certain amount of SQLite "connections" to be used by  
other process through an IPC layer. The connections are created at  
startup and 5 other database files are attached to them before being  
shared by this process. Most of the time, the statements requested are  
grouped into a database transaction like this:

     BEGIN TRANSACTION;
     INSERT INTO TBTEST (X,Y,Z) SELECT X,Y,Z FROM TBDATA JOIN ... ;
     DELETE FROM TBTEST WHERE X NOT IN (SELECT ....);
     UPDATE TBTEST SET Y=y WHERE X=x;
     COMMIT TRANSACTION;

   I'm already considering all the issues that this kind of design  
has: database concurrency, database locks, etc... but, this is not the  
thing.
   I'm experiencing a behavior that seams strange to me and I'd like  
to check if anybody can give me some tips to minimize this: The COMMIT  
statement consumes 50% or more of the time of the whole transaction;  
for example: if the whole transaction costs 2000 ms, only the COMMIT  
operation took 1500 ms. I understood all the operations described in  
the SQLite documentation about transaction commit/rollback feature,  
but this scenario seems to me that some adjustments can be made to  
minimize this.

   I'm using:
   - The server is an Intel 2GHz, 2GB of RAM and a 80GB hard-disk SATA  
II (w/ 8MB of cache) 7200 RPM;
   - Windows XP SP3 professional using NTFS;
   - SQLite 3.6.13 (amalgamation version);
   - I'm using shared-cache with the wait-notify feature implemented  
in the previous 3.6.12;
   - Other compiler options being used are:
       SQLITE_THREADSAFE=1;
       TEMP_STORE=3;
       SQLITE_DEFAULT_CACHE_SIZE=65568;
       SQLITE_DEFAULT_TEMP_CACHE_SIZE=65568;
       SQLITE_MAX_ATTACHED=30;
       SQLITE_ENABLE_COLUMN_METADATA;
       SQLITE_ENABLE_UNLOCK_NOTIFY.
   - The database size is around 200MB.

   What I'm looking for is:
   - If someone has a similar environment, what can be done to  
optimize Windows XP disk writes?
   - What PRAGMA statements or compiler options can help me with this,  
without the risk of getting the database corrupted?

   Any suggestion is helpful, thanks for the attention.
   Best regards,
   Alessandro Merolli.
  
_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to