1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193
|
<?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>Non-Durable Transactions</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="Getting Started with Berkeley DB Transaction Processing" />
<link rel="up" href="usingtxns.html" title="Chapter 3. Transaction Basics" />
<link rel="prev" href="usingtxns.html" title="Chapter 3. Transaction Basics" />
<link rel="next" href="abortresults.html" title="Aborting a Transaction" />
</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">Non-Durable Transactions</th>
</tr>
<tr>
<td width="20%" align="left"><a accesskey="p" href="usingtxns.html">Prev</a> </td>
<th width="60%" align="center">Chapter 3. Transaction Basics</th>
<td width="20%" align="right"> <a accesskey="n" href="abortresults.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="nodurabletxn"></a>Non-Durable Transactions</h2>
</div>
</div>
</div>
<p>
As previously noted, by default transaction commits are
durable because they cause the modifications performed
under the transaction to be synchronously recorded in
your on-disk log files. However, it is possible to use
non-durable transactions.
</p>
<p>
You may want non-durable transactions for performance
reasons. For example, you might be using transactions
simply for the isolation guarantee.
<span>
In this case, you might
not want a durability guarantee and so you may want to
prevent the disk I/O that normally accompanies a
transaction commit.
</span>
</p>
<p>
There are several ways to remove the durability guarantee
for your transactions:
</p>
<div class="itemizedlist">
<ul type="disc">
<li>
<p>
Specify
<span>
<code class="literal">true</code> to the
<code class="methodname">EnvironmentConfig.setTxnNoSync()</code>
method.
</span>
This causes DB to not synchronously force any log
data to disk upon transaction commit. That is, the modifications are held entirely
in the in-memory cache and the logging information is not forced to the filesystem for
long-term storage.
Note, however, that the logging
data will eventually make it to the filesystem (assuming no
application or OS crashes) as a part of DB's
management of its logging buffers and/or cache.
</p>
<p>
This form of a commit provides a weak durability
guarantee because data loss can occur due to
an application<span>, JVM,</span>
or OS crash.
</p>
<p>
This behavior is specified on a per-environment
handle basis. In order for your application to exhibit consistent
behavior, you need to specify this
<span>method</span>
for all of the environment handles used in your application.
</p>
<p>
You can achieve this behavior on a transaction by transaction basis by
<span>
using <code class="methodname">Transaction.commitNoSync()</code>
to commit your transaction, or by specifying <code class="literal">true</code> to the
<code class="methodname">TransactionConfig.setNoSync()</code> method when starting the
transaction.
</span>
</p>
</li>
<li>
<p>
Specify
<span>
<code class="literal">true</code> to the
<code class="methodname">EnvironmentConfig.setTxnWriteNoSync()</code>
method.
</span>
This causes
<span>
logging
</span>
data to be synchronously
written to the OS's file system buffers upon
transaction commit. The data will eventually be
written to disk, but this occurs when the
operating system chooses to schedule the
activity; the transaction commit can complete
successfully before this disk I/O is performed
by the OS.
</p>
<p>
This form of commit protects you against application
<span>and JVM</span> crashes, but not against OS
crashes. This method offers less room for the possibility of data loss than does
<span><code class="methodname">EnvironmentConfig.setTxnNoSync()</code>.</span>
</p>
<p>
This behavior is specified on a per-environment
handle basis. In order for your application to exhibit consistent
behavior, you need to specify this
<span>method</span>
for all of the environment handles used in your application.
</p>
<p>
You can achieve this behavior on a transaction by transaction basis by
<span>
using <code class="methodname">Transaction.commitWriteNoSync()</code>
to commit your transaction, or by specifying <code class="literal">true</code> to
<code class="methodname">TransactionConfig.setWriteNoSync()</code> method when starting the
transaction.
</span>
</p>
</li>
<li>
<p>
Maintain your logs entirely in-memory. In this
case, your logs are never written to disk. The
result is that you lose all durability guarantees.
See
<a class="xref" href="logconfig.html#inmemorylogging" title="Configuring In-Memory Logging">Configuring In-Memory Logging</a>
for more information.
</p>
</li>
</ul>
</div>
</div>
<div class="navfooter">
<hr />
<table width="100%" summary="Navigation footer">
<tr>
<td width="40%" align="left"><a accesskey="p" href="usingtxns.html">Prev</a> </td>
<td width="20%" align="center">
<a accesskey="u" href="usingtxns.html">Up</a>
</td>
<td width="40%" align="right"> <a accesskey="n" href="abortresults.html">Next</a></td>
</tr>
<tr>
<td width="40%" align="left" valign="top">Chapter 3. Transaction Basics </td>
<td width="20%" align="center">
<a accesskey="h" href="index.html">Home</a>
</td>
<td width="40%" align="right" valign="top"> Aborting a Transaction</td>
</tr>
</table>
</div>
</body>
</html>
|