summaryrefslogtreecommitdiff
path: root/docs/programmer_reference/program_faq.html
blob: c15e4ff1c7c1b7dfeff44da04ff3068658aa6b1b (plain)
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
<?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>Programmer notes FAQ</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="program.html" title="Chapter 15.  Programmer Notes" />
    <link rel="prev" href="program_perfmon.html" title="Performance Event Monitoring" />
    <link rel="next" href="lock.html" title="Chapter 16.  The Locking Subsystem" />
  </head>
  <body>
    <div xmlns="" class="navheader">
      <div class="libver">
        <p>Library Version 12.1.6.1</p>
      </div>
      <table width="100%" summary="Navigation header">
        <tr>
          <th colspan="3" align="center">Programmer notes FAQ</th>
        </tr>
        <tr>
          <td width="20%" align="left"><a accesskey="p" href="program_perfmon.html">Prev</a> </td>
          <th width="60%" align="center">Chapter 15.  Programmer Notes </th>
          <td width="20%" align="right"> <a accesskey="n" href="lock.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="program_faq"></a>Programmer notes FAQ</h2>
          </div>
        </div>
      </div>
      <div class="orderedlist">
        <ol type="1">
          <li>
            <p>
                <span class="bold"><strong>What priorities should
                threads/tasks executing Berkeley DB functions be
                given?</strong></span>
            </p>
            <p>
                Tasks executing Berkeley DB functions should have
                the same, or roughly equivalent, system priorities.
                For example, it can be dangerous to give tasks of
                control performing checkpoints a lower priority than
                tasks of control doing database lookups, and
                starvation can sometimes result. 
            </p>
          </li>
          <li>
            <p>
                <span class="bold"><strong>Why isn't the C++ API exception
                safe?</strong></span>
            </p>
            <p> 
                The Berkeley DB C++ API is a thin wrapper around
                the C API that maps most return values to exceptions,
                and gives the C++ handles the same lifecycles as their
                C counterparts. One consequence is that if an
                exception occurs while a cursor or transaction handle
                is open, the application must explicitly close the
                cursor or abort the transaction. 
            </p>
            <p> 
                Applications can be simplified and bugs avoided by
                creating wrapper classes around <a href="../api_reference/C/dbc.html" class="olink">DBC</a> and <a href="../api_reference/C/txn.html" class="olink">TXN</a> that
                call the appropriate cleanup method in the wrapper's
                destructor. By creating an instance of the wrappers on
                the stack, C++ scoping rules will ensure that the
                destructor is called before exception handling unrolls
                the block that contains the wrapper object. 
            </p>
          </li>
          <li>
            <p>
                <span class="bold"><strong> How do I handle a "pass 4"
                    error when trying to run one of the example
                    Performance Event Monitoring scripts on my Linux
                    system? The library was configured with
                    <code class="literal">--enable-dtrace</code> and built
                    without error. </strong></span>
            </p>
            <p>
                A Linux installation can have SystemTap support for
                kernel probe points without including the kernel
                "utrace" module needed to use userspace probes. Pass 4
                errors can occur when this required userspace support
                is not present.
            </p>
          </li>
          <li>
            <p>
                <span class="bold"><strong> I have a program with multiple
                    threads running on multi-core systems, and it uses
                    a shared DB handle for all the threads. The
                    program does not behave as well as I expect and I
                    see a lot of contention on the dbp-&gt;mutex, what
                    should I do to reduce this contention ?
                </strong></span>
            </p>
            <p> 
                When running multi-threaded program on a
                multi-core/multi-processor system, we suggest using a
                DB handle per thread instead of using a shared handle
                accorss threads. Since many operations(like creating
                cursors) requires to lock the DB handle first, and if
                using a shared handle, there could be a lot of lock
                contention on the handle. 
            </p>
          </li>
        </ol>
      </div>
    </div>
    <div class="navfooter">
      <hr />
      <table width="100%" summary="Navigation footer">
        <tr>
          <td width="40%" align="left"><a accesskey="p" href="program_perfmon.html">Prev</a> </td>
          <td width="20%" align="center">
            <a accesskey="u" href="program.html">Up</a>
          </td>
          <td width="40%" align="right"> <a accesskey="n" href="lock.html">Next</a></td>
        </tr>
        <tr>
          <td width="40%" align="left" valign="top">Performance Event
        Monitoring </td>
          <td width="20%" align="center">
            <a accesskey="h" href="index.html">Home</a>
          </td>
          <td width="40%" align="right" valign="top"> Chapter 16.  The Locking Subsystem </td>
        </tr>
      </table>
    </div>
  </body>
</html>