File: nodurabletxn.html

package info (click to toggle)
db5.3 5.3.28%2Bdfsg1-0.5
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 158,360 kB
  • sloc: ansic: 448,411; java: 111,824; tcl: 80,544; sh: 44,326; cs: 33,697; cpp: 21,604; perl: 14,557; xml: 10,799; makefile: 4,077; yacc: 1,003; awk: 965; sql: 801; erlang: 342; python: 216; php: 24; asm: 14
file content (193 lines) | stat: -rw-r--r-- 8,727 bytes parent folder | download | duplicates (8)
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>