1<?xml version="1.0" encoding="UTF-8" standalone="no"?> 2<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 3<html xmlns="http://www.w3.org/1999/xhtml"> 4 <head> 5 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 6 <title>Deadlock detection using timers</title> 7 <link rel="stylesheet" href="gettingStarted.css" type="text/css" /> 8 <meta name="generator" content="DocBook XSL Stylesheets V1.73.2" /> 9 <link rel="start" href="index.html" title="Berkeley DB Programmer's Reference Guide" /> 10 <link rel="up" href="lock.html" title="Chapter��15.�� The Locking Subsystem" /> 11 <link rel="prev" href="lock_dead.html" title="Deadlock detection" /> 12 <link rel="next" href="lock_deaddbg.html" title="Deadlock debugging" /> 13 </head> 14 <body> 15 <div class="navheader"> 16 <table width="100%" summary="Navigation header"> 17 <tr> 18 <th colspan="3" align="center">Deadlock detection using timers</th> 19 </tr> 20 <tr> 21 <td width="20%" align="left"><a accesskey="p" href="lock_dead.html">Prev</a>��</td> 22 <th width="60%" align="center">Chapter��15.�� 23 The Locking Subsystem 24 </th> 25 <td width="20%" align="right">��<a accesskey="n" href="lock_deaddbg.html">Next</a></td> 26 </tr> 27 </table> 28 <hr /> 29 </div> 30 <div class="sect1" lang="en" xml:lang="en"> 31 <div class="titlepage"> 32 <div> 33 <div> 34 <h2 class="title" style="clear: both"><a id="lock_timeout"></a>Deadlock detection using timers</h2> 35 </div> 36 </div> 37 </div> 38 <p>Lock and transaction timeouts may be used in place of, or in addition 39to, regular deadlock detection. If lock timeouts are set, lock requests 40will return <a class="link" href="program_errorret.html#program_errorret.DB_LOCK_NOTGRANTED">DB_LOCK_NOTGRANTED</a> from a lock call when it is 41detected that the lock's timeout has expired, that is, the lock request 42has blocked, waiting, longer than the specified timeout. If transaction 43timeouts are set, lock requests will return <a class="link" href="program_errorret.html#program_errorret.DB_LOCK_NOTGRANTED">DB_LOCK_NOTGRANTED</a> 44from a lock call when it has been detected that the transaction has been 45active longer than the specified timeout.</p> 46 <p>If lock or transaction timeouts have been set, database operations will 47return <a class="link" href="program_errorret.html#program_errorret.DB_LOCK_DEADLOCK">DB_LOCK_DEADLOCK</a> when the lock timeout has expired or the 48transaction has been active longer than the specified timeout. 49Applications wanting to distinguish between true deadlock and timeout 50can use the <a href="../api_reference/C/envset_flags.html" class="olink">DB_ENV->set_flags()</a> configuration flag, which causes 51database operations to instead return <a class="link" href="program_errorret.html#program_errorret.DB_LOCK_NOTGRANTED">DB_LOCK_NOTGRANTED</a> in the 52case of timeout.</p> 53 <p>As lock and transaction timeouts are only checked when lock requests 54first block or when deadlock detection is performed, the accuracy of 55the timeout depends on how often deadlock detection is performed. More 56specifically, transactions will continue to run after their timeout has 57expired if they do not block on a lock request after that time. 58A separate deadlock detection thread (or process) should always 59be used if the application depends on timeouts; otherwise, if 60there are no new blocked lock requests a pending timeout will 61never trigger.</p> 62 <p>If the database environment deadlock detector has been configured with 63the <a href="../api_reference/C/lockdetect.html#detect_DB_LOCK_EXPIRE" class="olink">DB_LOCK_EXPIRE</a> option, timeouts are the only mechanism by 64which deadlocks will be broken. If the deadlock detector has been 65configured with a different option, then regular deadlock detection will 66be performed, and in addition, if timeouts have also been specified, 67lock requests and transactions will time out as well.</p> 68 <p>Lock and transaction timeouts may be specified on a database environment 69wide basis using the <a href="../api_reference/C/envset_timeout.html" class="olink">DB_ENV->set_timeout()</a> method. Lock timeouts may be 70specified on a per-lock request basis using the <a href="../api_reference/C/lockvec.html" class="olink">DB_ENV->lock_vec()</a> method. Lock 71and transaction timeouts may be specified on a per-transaction basis 72using the <a href="../api_reference/C/txnset_timeout.html" class="olink">DB_TXN->set_timeout()</a> method. Per-lock and per-transaction 73timeouts supersede environment wide timeouts.</p> 74 <p>For example, consider that the environment wide transaction timeout has 75been set to 20ms, the environment wide lock timeout has been set to 7610ms, a transaction has been created in this environment and its timeout 77value set to 8ms, and a specific lock request has been made on behalf 78of this transaction where the lock timeout was set to 4ms. By default, 79transactions in this environment will be timed out if they block waiting 80for a lock after 20ms. The specific transaction described will be timed 81out if it blocks waiting for a lock after 8ms. By default, any lock 82request in this system will be timed out if it blocks longer than 10ms, 83and the specific lock described will be timed out if it blocks longer 84than 4ms.</p> 85 </div> 86 <div class="navfooter"> 87 <hr /> 88 <table width="100%" summary="Navigation footer"> 89 <tr> 90 <td width="40%" align="left"><a accesskey="p" href="lock_dead.html">Prev</a>��</td> 91 <td width="20%" align="center"> 92 <a accesskey="u" href="lock.html">Up</a> 93 </td> 94 <td width="40%" align="right">��<a accesskey="n" href="lock_deaddbg.html">Next</a></td> 95 </tr> 96 <tr> 97 <td width="40%" align="left" valign="top">Deadlock detection��</td> 98 <td width="20%" align="center"> 99 <a accesskey="h" href="index.html">Home</a> 100 </td> 101 <td width="40%" align="right" valign="top">��Deadlock debugging</td> 102 </tr> 103 </table> 104 </div> 105 </body> 106</html> 107