On 09.12.2011 15:51, email@xxxxxxxxxx wrote: > the GUI app should be as fast as possible, which is not possible given > this whole DB locking. Correct. The GUI will be blocked when the engine is writing. If the engine is writing most of the time, the GUI will be blocked often. > So, my question is: is it possible to make record-level (or at least > table-level) locking instead of DB-level locking and busy timeout. No. SQLite does not support record-level locking. > I tried lowering the timeout interval but it didn't give the result I'm > after (plus, target PCs can be slower than mine, so the timeout may not > be reliable for client machines) Are running all indexing in a single transaction? If so, can't you split it up into multiple transactions and sleep a while in between so readers can jump in? WAL is also worth trying. In WAL mode, a writer does not block readers. Reading and writing can proceed concurrently. See DISQLite3.chm -> SQLite3 Documentation -> Atomic Commit -> Write Ahead Logging for details. Ralf _______________________________________________ Delphi Inspiration mailing list yunqa@xxxxxxxxxxxxx //www.freelists.org/list/yunqa