summaryrefslogtreecommitdiff
path: root/docs/programmer_reference/lock_page.html
diff options
context:
space:
mode:
authorLorry Tar Creator <lorry-tar-importer@baserock.org>2015-02-17 17:25:57 +0000
committer <>2015-03-17 16:26:24 +0000
commit780b92ada9afcf1d58085a83a0b9e6bc982203d1 (patch)
tree598f8b9fa431b228d29897e798de4ac0c1d3d970 /docs/programmer_reference/lock_page.html
parent7a2660ba9cc2dc03a69ddfcfd95369395cc87444 (diff)
downloadberkeleydb-master.tar.gz
Imported from /home/lorry/working-area/delta_berkeleydb/db-6.1.23.tar.gz.HEADdb-6.1.23master
Diffstat (limited to 'docs/programmer_reference/lock_page.html')
-rw-r--r--docs/programmer_reference/lock_page.html131
1 files changed, 80 insertions, 51 deletions
diff --git a/docs/programmer_reference/lock_page.html b/docs/programmer_reference/lock_page.html
index b1733b70..06c099de 100644
--- a/docs/programmer_reference/lock_page.html
+++ b/docs/programmer_reference/lock_page.html
@@ -14,7 +14,7 @@
<body>
<div xmlns="" class="navheader">
<div class="libver">
- <p>Library Version 11.2.5.3</p>
+ <p>Library Version 12.1.6.1</p>
</div>
<table width="100%" summary="Navigation header">
<tr>
@@ -22,9 +22,7 @@
</tr>
<tr>
<td width="20%" align="left"><a accesskey="p" href="lock_deaddbg.html">Prev</a> </td>
- <th width="60%" align="center">Chapter 16. 
- The Locking Subsystem
- </th>
+ <th width="60%" align="center">Chapter 16.  The Locking Subsystem </th>
<td width="20%" align="right"> <a accesskey="n" href="lock_notxn.html">Next</a></td>
</tr>
</table>
@@ -38,57 +36,88 @@
</div>
</div>
</div>
- <p>With the exception of the Queue access method, the Berkeley DB access methods
-do page-level locking. The size of pages in a database may be set when
-the database is created by calling the <a href="../api_reference/C/dbset_pagesize.html" class="olink">DB-&gt;set_pagesize()</a> method. If
-not specified by the application, Berkeley DB selects a page size that will
-provide the best I/O performance by setting the page size equal to the
-block size of the underlying file system. Selecting a smaller page size
-can result in increased concurrency for some applications.</p>
- <p>In the Btree access method, Berkeley DB uses a technique called lock coupling
-to improve concurrency. The traversal of a Btree requires reading a
-page, searching that page to determine which page to search next, and
-then repeating this process on the next page. Once a page has been
-searched, it will never be accessed again for this operation, unless a
-page split is required. To improve concurrency in the tree, once the
-next page to read/search has been determined, that page is locked and
-then the original page lock is released atomically (that is, without
-relinquishing control of the lock manager). When page splits become
-necessary, write locks are reacquired.</p>
- <p>Because the Recno access method is built upon Btree, it also uses lock
-coupling for read operations. However, because the Recno access method
-must maintain a count of records on its internal pages, it cannot
-lock-couple during write operations. Instead, it retains write locks
-on all internal pages during every update operation. For this reason,
-it is not possible to have high concurrency in the Recno access method
-in the presence of write operations.</p>
- <p>The Queue access method uses only short-term page locks. That is, a page
-lock is released prior to requesting another page lock. Record locks are
-used for transaction isolation. The provides a high degree of concurrency
-for write operations. A metadata page is used to keep track of the head
-and tail of the queue. This page is never locked during other locking or
-I/O operations.</p>
- <p>The Hash access method does not have such traversal issues, but it must
-always refer to its metadata while computing a hash function because it
-implements dynamic hashing. This metadata is stored on a special page
-in the hash database. This page must therefore be read-locked on every
-operation. Fortunately, it needs to be write-locked only when new pages
-are allocated to the file, which happens in three cases:</p>
+ <p>
+ With the exception of the Queue access method, the Berkeley
+ DB access methods do page-level locking. The size of pages in
+ a database may be set when the database is created by calling
+ the <a href="../api_reference/C/dbset_pagesize.html" class="olink">DB-&gt;set_pagesize()</a> method. If not specified by the
+ application, Berkeley DB selects a page size that will provide
+ the best I/O performance by setting the page size equal to the
+ block size of the underlying file system. Selecting a smaller
+ page size can result in increased concurrency for some
+ applications.
+ </p>
+ <p>
+ In the Btree access method, Berkeley DB uses a technique
+ called lock coupling to improve concurrency. The traversal of
+ a Btree requires reading a page, searching that page to
+ determine which page to search next, and then repeating this
+ process on the next page. Once a page has been searched, it
+ will never be accessed again for this operation, unless a page
+ split is required. To improve concurrency in the tree, once
+ the next page to read/search has been determined, that page is
+ locked and then the original page lock is released atomically
+ (that is, without relinquishing control of the lock manager).
+ When page splits become necessary, write locks are
+ reacquired.
+ </p>
+ <p>
+ Because the Recno access method is built upon Btree, it also
+ uses lock coupling for read operations. However, because the
+ Recno access method must maintain a count of records on its
+ internal pages, it cannot lock-couple during write operations.
+ Instead, it retains write locks on all internal pages during
+ every update operation. For this reason, it is not possible to
+ have high concurrency in the Recno access method in the
+ presence of write operations.
+ </p>
+ <p>
+ The Queue access method uses only short-term page locks.
+ That is, a page lock is released prior to requesting another
+ page lock. Record locks are used for transaction isolation.
+ The provides a high degree of concurrency for write
+ operations. A metadata page is used to keep track of the head
+ and tail of the queue. This page is never locked during other
+ locking or I/O operations.
+ </p>
+ <p>
+ The Hash access method does not have such traversal issues,
+ but it must always refer to its metadata while computing a
+ hash function because it implements dynamic hashing. This
+ metadata is stored on a special page in the hash database.
+ This page must therefore be read-locked on every operation.
+ Fortunately, it needs to be write-locked only when new pages
+ are allocated to the file, which happens in three
+ cases:
+ </p>
<div class="itemizedlist">
<ul type="disc">
- <li>a hash bucket becomes full and needs to split</li>
- <li>a key or data item is too large to fit on a normal page</li>
- <li>the number of duplicate items for a fixed key becomes so large that they
-are moved to an auxiliary page</li>
+ <li>
+ a hash bucket becomes full and needs to
+ split
+ </li>
+ <li>
+ a key or data item is too large to fit on a normal
+ page
+ </li>
+ <li>
+ the number of duplicate items for a fixed key
+ becomes so large that they are moved to an auxiliary
+ page
+ </li>
</ul>
</div>
- <p>In this case, the access method must obtain a write lock on the metadata
-page, thus requiring that all readers be blocked from entering the tree
-until the update completes.</p>
- <p>Finally, when traversing duplicate data items for a key, the lock on
-the key value also acts as a lock on all duplicates of that key.
-Therefore, two conflicting threads of control cannot access the same
-duplicate set simultaneously.</p>
+ <p>
+ In this case, the access method must obtain a write lock on
+ the metadata page, thus requiring that all readers be blocked
+ from entering the tree until the update completes.
+ </p>
+ <p>
+ Finally, when traversing duplicate data items for a key, the
+ lock on the key value also acts as a lock on all duplicates of
+ that key. Therefore, two conflicting threads of control cannot
+ access the same duplicate set simultaneously.
+ </p>
</div>
<div class="navfooter">
<hr />