> "There are four levels to the shared-cache locking model: transaction
>  level locking, table level locking, cache level locking, and schema
>  level locking. They are described in the following three sub-sections."

This would be a bad way of documenting this because "cache level
locking" works on a completely different level than transaction, table
or schema level locking. The exclusive mutex is taken inside one call
to sqlite3_step() and released upon exit. But all other "locks" have
"meta-level" notion and work between calls to sqlite3_*() functions.


Pavel


On Mon, Aug 13, 2012 at 6:45 AM, Boris Kolpackov
<bo...@codesynthesis.com> wrote:
> Hi Richard,
>
> Richard Hipp <d...@sqlite.org> writes:
>
>> In shared-cache mode, SQLite acquires a mutex on the shared cache, thus
>> serializing access.
>
> Oh, that's quite a surprise. I would have never said that something
> like this is going on just by reading the documentation page on shared
> cache:
>
> http://www.sqlite.org/sharedcache.html
>
> Specifically, quoting Section 2.2, "Table Level Locking":
>
> "When two or more connections use a shared-cache, locks are used to
>  serialize concurrent access attempts on a per-table basis. Tables
>  support two types of locks, "read-locks" and "write-locks". Locks
>  are granted to connections - at any one time, each database connection
>  has either a read-lock, write-lock or no lock on each database table.
>
>  At any one time, a single table may have any number of active read-locks
>  or a single active write lock. To read data [from] a table, a connection
>  must first obtain a read-lock. To write to a table, a connection must
>  obtain a write-lock on that table."
>
> From this I at the time concluded that there could be multiple connections
> reading from a table concurrently. But it appears I was wrong.
>
> Perhaps this page should be updated to reflect this. Specifically, the
> last paragraph in Section 2.0:
>
> "There are three levels to the shared-cache locking model, transaction
>  level locking, table level locking and schema level locking. They are
>  described in the following three sub-sections."
>
> Should probably read something along these lines:
>
> "There are four levels to the shared-cache locking model: transaction
>  level locking, table level locking, cache level locking, and schema
>  level locking. They are described in the following three sub-sections."
>
> Then a new section should be inserted between 2.2 and 2.3 that reads
> along these lines:
>
> "2.3 Cache Level Locking
>
>  When a connection needs to access (read or write) data from a table,
>  it must acquire an exclusive mutex on the shared cache. In particular,
>  this means that in the shared cache mode actual access to the database
>  pages, regardless of whether for reading or writing, is always serialized."
>
> If you find it suitable, feel free to use this to update the documentation.
>
> Boris
> --
> Boris Kolpackov, Code Synthesis        http://codesynthesis.com/~boris/blog
> Compiler-based ORM system for C++      http://codesynthesis.com/products/odb
> Open-source XML data binding for C++   http://codesynthesis.com/products/xsd
> XML data binding for embedded systems  http://codesynthesis.com/products/xsde
>
> _______________________________________________
> sqlite-users mailing list
> sqlite-users@sqlite.org
> http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users
_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to