On Apr 28, 2010, at 10:20 PM, Guillaume Duranceau wrote: > Hello all, > > While running a SQLite transaction writing into the DB (thus holding > the > RESERVED lock), in case the memory cache becomes full, SQLite will > try to > write the content of a dirty page into the DB. To do so, it promotes > the > RESERVED lock to EXCLUSIVE. This can be annoying because afterwards, > the > EXCLUSIVE lock will be released only when the transaction will > finally be > committed. In the meantime, database access to readers will be > prohibited. > > This behaviour is described at http://www.sqlite.org/lockingv3.html, > chapter 5.0 "Writing to a database file": > > <quote> > If the reason for writing to the database file is because the memory > cache > was full, then the writer will not commit right away. Instead, the > writer > might continue to make changes to other pages. Before subsequent > changes > are written to the database file, the rollback journal must be > flushed to > disk again. Note also that the EXCLUSIVE lock that the writer > obtained in > order to write to the database initially must be held until all > changes > are committed. That means that no other processes are able to access > the > database from the time the memory cache first spills to disk until the > transaction commits. > </quote> > > I'm wondering why the EXCLUSIVE lock is not downgraded to a RESERVED > lock > right after writing the dirty page into the DB. This doesn't seem to > me as > an undoable task (the transition EXCLUSIVE->RESERVED would simply > need to > be managed by xUnlock functions), but there might be technical/ > conceptual > reasons preventing to do so. What are your views on this ?
If a reader tried to read the db file after a writer has started writing out dirty pages but before it has committed its entire transaction, it would see an inconsistent (and possibly corrupt) database file. _______________________________________________ sqlite-users mailing list [email protected] http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

