[yunqa.de] Re: sqlite3_busy_timeout() with TDISQLite3Database?

  • From: Delphi Inspiration <delphi@xxxxxxxx>
  • To: yunqa@xxxxxxxxxxxxx
  • Date: Fri, 09 Dec 2011 17:53:36 +0100

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



Other related posts: