mirror of
https://github.com/berkeleydb/libdb.git
synced 2024-11-16 09:06:25 +00:00
109 lines
6.2 KiB
HTML
109 lines
6.2 KiB
HTML
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||
<head>
|
||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
||
<title>Deadlock detection using timers</title>
|
||
<link rel="stylesheet" href="gettingStarted.css" type="text/css" />
|
||
<meta name="generator" content="DocBook XSL Stylesheets V1.73.2" />
|
||
<link rel="start" href="index.html" title="Berkeley DB Programmer's Reference Guide" />
|
||
<link rel="up" href="lock.html" title="Chapter 16. The Locking Subsystem" />
|
||
<link rel="prev" href="lock_dead.html" title="Deadlock detection" />
|
||
<link rel="next" href="lock_deaddbg.html" title="Deadlock debugging" />
|
||
</head>
|
||
<body>
|
||
<div xmlns="" class="navheader">
|
||
<div class="libver">
|
||
<p>Library Version 11.2.5.3</p>
|
||
</div>
|
||
<table width="100%" summary="Navigation header">
|
||
<tr>
|
||
<th colspan="3" align="center">Deadlock detection using timers</th>
|
||
</tr>
|
||
<tr>
|
||
<td width="20%" align="left"><a accesskey="p" href="lock_dead.html">Prev</a> </td>
|
||
<th width="60%" align="center">Chapter 16.
|
||
The Locking Subsystem
|
||
</th>
|
||
<td width="20%" align="right"> <a accesskey="n" href="lock_deaddbg.html">Next</a></td>
|
||
</tr>
|
||
</table>
|
||
<hr />
|
||
</div>
|
||
<div class="sect1" lang="en" xml:lang="en">
|
||
<div class="titlepage">
|
||
<div>
|
||
<div>
|
||
<h2 class="title" style="clear: both"><a id="lock_timeout"></a>Deadlock detection using timers</h2>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<p>Lock and transaction timeouts may be used in place of, or in addition
|
||
to, regular deadlock detection. If lock timeouts are set, lock requests
|
||
will return <a class="link" href="program_errorret.html#program_errorret.DB_LOCK_NOTGRANTED">DB_LOCK_NOTGRANTED</a> from a lock call when it is
|
||
detected that the lock's timeout has expired, that is, the lock request
|
||
has blocked, waiting, longer than the specified timeout. If transaction
|
||
timeouts are set, lock requests will return <a class="link" href="program_errorret.html#program_errorret.DB_LOCK_NOTGRANTED">DB_LOCK_NOTGRANTED</a>
|
||
from a lock call when it has been detected that the transaction has been
|
||
active longer than the specified timeout.</p>
|
||
<p>If lock or transaction timeouts have been set, database operations will
|
||
return <a class="link" href="program_errorret.html#program_errorret.DB_LOCK_DEADLOCK">DB_LOCK_DEADLOCK</a> when the lock timeout has expired or the
|
||
transaction has been active longer than the specified timeout.
|
||
Applications wanting to distinguish between true deadlock and timeout
|
||
can use the <a href="../api_reference/C/envset_flags.html" class="olink">DB_ENV->set_flags()</a> configuration flag, which causes
|
||
database operations to instead return <a class="link" href="program_errorret.html#program_errorret.DB_LOCK_NOTGRANTED">DB_LOCK_NOTGRANTED</a> in the
|
||
case of timeout.</p>
|
||
<p>As lock and transaction timeouts are only checked when lock requests
|
||
first block or when deadlock detection is performed, the accuracy of
|
||
the timeout depends on how often deadlock detection is performed. More
|
||
specifically, transactions will continue to run after their timeout has
|
||
expired if they do not block on a lock request after that time.
|
||
A separate deadlock detection thread (or process) should always
|
||
be used if the application depends on timeouts; otherwise, if
|
||
there are no new blocked lock requests a pending timeout will
|
||
never trigger.</p>
|
||
<p>If the database environment deadlock detector has been configured with
|
||
the <a href="../api_reference/C/lockdetect.html#detect_DB_LOCK_EXPIRE" class="olink">DB_LOCK_EXPIRE</a> option, timeouts are the only mechanism by
|
||
which deadlocks will be broken. If the deadlock detector has been
|
||
configured with a different option, then regular deadlock detection will
|
||
be performed, and in addition, if timeouts have also been specified,
|
||
lock requests and transactions will time out as well.</p>
|
||
<p>Lock and transaction timeouts may be specified on a database environment
|
||
wide basis using the <a href="../api_reference/C/envset_timeout.html" class="olink">DB_ENV->set_timeout()</a> method. Lock timeouts may be
|
||
specified on a per-lock request basis using the <a href="../api_reference/C/lockvec.html" class="olink">DB_ENV->lock_vec()</a> method. Lock
|
||
and transaction timeouts may be specified on a per-transaction basis
|
||
using the <a href="../api_reference/C/txnset_timeout.html" class="olink">DB_TXN->set_timeout()</a> method. Per-lock and per-transaction
|
||
timeouts supersede environment wide timeouts.</p>
|
||
<p>For example, consider that the environment wide transaction timeout has
|
||
been set to 20ms, the environment wide lock timeout has been set to
|
||
10ms, a transaction has been created in this environment and its timeout
|
||
value set to 8ms, and a specific lock request has been made on behalf
|
||
of this transaction where the lock timeout was set to 4ms. By default,
|
||
transactions in this environment will be timed out if they block waiting
|
||
for a lock after 20ms. The specific transaction described will be timed
|
||
out if it blocks waiting for a lock after 8ms. By default, any lock
|
||
request in this system will be timed out if it blocks longer than 10ms,
|
||
and the specific lock described will be timed out if it blocks longer
|
||
than 4ms.</p>
|
||
</div>
|
||
<div class="navfooter">
|
||
<hr />
|
||
<table width="100%" summary="Navigation footer">
|
||
<tr>
|
||
<td width="40%" align="left"><a accesskey="p" href="lock_dead.html">Prev</a> </td>
|
||
<td width="20%" align="center">
|
||
<a accesskey="u" href="lock.html">Up</a>
|
||
</td>
|
||
<td width="40%" align="right"> <a accesskey="n" href="lock_deaddbg.html">Next</a></td>
|
||
</tr>
|
||
<tr>
|
||
<td width="40%" align="left" valign="top">Deadlock detection </td>
|
||
<td width="20%" align="center">
|
||
<a accesskey="h" href="index.html">Home</a>
|
||
</td>
|
||
<td width="40%" align="right" valign="top"> Deadlock debugging</td>
|
||
</tr>
|
||
</table>
|
||
</div>
|
||
</body>
|
||
</html>
|