maxtxns.html   [plain text]


<?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>Configuring the Transaction Subsystem</title>
    <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
    <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
    <link rel="home" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
    <link rel="up" href="usingtxns.html" title="Chapter 3. Transaction Basics" />
    <link rel="previous" href="txnindices.html" title="Secondary Indices with Transaction Applications" />
    <link rel="next" href="txnconcurrency.html" title="Chapter 4. Concurrency" />
  </head>
  <body>
    <div class="navheader">
      <table width="100%" summary="Navigation header">
        <tr>
          <th colspan="3" align="center">Configuring the Transaction Subsystem</th>
        </tr>
        <tr>
          <td width="20%" align="left"><a accesskey="p" href="txnindices.html">Prev</a> </td>
          <th width="60%" align="center">Chapter 3. Transaction Basics</th>
          <td width="20%" align="right"> <a accesskey="n" href="txnconcurrency.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="maxtxns"></a>Configuring the Transaction Subsystem</h2>
          </div>
        </div>
        <div></div>
      </div>
      <p>
            Most of the configuration activities that you need to perform
            for your transactional DB application will involve the
            locking and logging subsystems. See 
            <a href="txnconcurrency.html">Concurrency</a>
            and
            <a href="filemanagement.html">Managing DB Files</a>
            for details.
        </p>
      <p>
            However, there are a couple of things that you can do to
            configure your transaction subsystem directly. These things
            are:
        </p>
      <div class="itemizedlist">
        <ul type="disc">
          <li>
            <p>
                    Configure the maximum number of simultaneous
                    transactions needed by your application. 
                    In general, you should not need to do this unless you
                    use deeply nested transactions or you have many threads all
                    of which have active transactions. In addition, you may
                    need to a higher maximum number of transactions if you
                    are using snapshot isolation. See
                    <a href="isolation.html#sisolation_maxtxn">Snapshot Isolation Transactional Requirements</a>
                    for details.
                </p>
            <p>
                    By default, your application can support 20 active
                    transactions. 
                </p>
            <p>
                    You can set the maximum number of simultaneous
                    transactions supported by your application using
                    <span>
                        the
                        
                        <tt class="methodname">DbEnv::set_tx_max()</tt>
                        method. Note that this method must be called
                        before the environment has been opened.
                    </span>
                    
                </p>
            <p>
                    If your application has exceeded this maximum value,
                    then any attempt to begin a new transaction will fail.
                </p>
            <p>
                    This value can also be set using the
                    <tt class="literal">DB_CONFIG</tt> file's
                    <tt class="literal">set_tx_max</tt> parameter. Remember that
                    the <tt class="literal">DB_CONFIG</tt> must reside in your
                    environment home directory.
                </p>
          </li>
          <li>
            <span>
                  <p>
                    <span>
                    Configure the timeout value for your transactions. 
                    </span>
                    
                    
                    This value represents the longest period of time a
                    transaction can be active. Note, however, that
                    transaction timeouts are checked only when DB
                    examines its lock tables for blocked locks
                    (see <a href="blocking_deadlocks.html">Locks, Blocks, and Deadlocks</a>
                    for more information). Therefore, a transaction's timeout can
                    have expired, but the application will not be notified until DB 
                    has a reason to examine its lock tables.
                </p>
                <p>
                    Be aware that some transactions may be
                    inappropriately timed out before the transaction has a
                    chance to complete. You should therefore use this
                    mechanism only if you know your application
                    might have unacceptably long transactions and
                    you want to make sure your application will
                    not stall during their execution.
                    (This might happen if, for example, your
                    transaction blocks or requests too much
                    data.)
                </p>
                <p>
                    Note that by default transaction timeouts are set to 0 seconds, which means that they never time
                    out.
                </p>
                <p>
                    To set the maximum timeout value for your transactions,
                    use  the
                            
                            <span><tt class="methodname">DbEnv::set_timeout()</tt></span>
                            
                        method. This method configures the entire
                        environment; not just the handle used to set the
                        configuration. Further, this value may
                        be set at any time during the application's
                        lifetime. 
                </p>
                <p>
                    This value can also be set using the
                    <tt class="literal">DB_CONFIG</tt> file's
                    <tt class="literal">set_txn_timeout</tt> parameter.
                </p> 
                
</span>
          </li>
        </ul>
      </div>
      <p>
            For example:
        </p>
      <pre class="programlisting">#include "db_cxx.h"

...
                                                                                                                                  
int main(void)
{
    u_int32_t env_flags = DB_CREATE     |  // If the environment does not
                                           // exist, create it.
                          DB_INIT_LOCK  |  // Initialize locking
                          DB_INIT_LOG   |  // Initialize logging
                          DB_INIT_MPOOL |  // Initialize the cache
                          DB_THREAD     |  // Free-thread the env handle
                          DB_INIT_TXN;     // Initialize transactions

    std::string envHome("/export1/testEnv");
    DbEnv myEnv(0);

    try {

        // Configure a maximum transaction timeout of 1 second.
        myEnv.set_timeout(1000000, DB_SET_TXN_TIMEOUT);
        // Configure 40 maximum transactions.
        myEnv.set_tx_max(40);
        myEnv.open(envHome.c_str(), env_flags, 0);

        // From here, you open your databases, proceed with your 
        // database operations, and respond to deadlocks as 
        // is normal (omitted for brevity).

        
        ...</pre>
    </div>
    <div class="navfooter">
      <hr />
      <table width="100%" summary="Navigation footer">
        <tr>
          <td width="40%" align="left"><a accesskey="p" href="txnindices.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="txnconcurrency.html">Next</a></td>
        </tr>
        <tr>
          <td width="40%" align="left" valign="top">Secondary Indices with Transaction Applications </td>
          <td width="20%" align="center">
            <a accesskey="h" href="index.html">Home</a>
          </td>
          <td width="40%" align="right" valign="top"> Chapter 4. Concurrency</td>
        </tr>
      </table>
    </div>
  </body>
</html>