mirror of
https://github.com/berkeleydb/libdb.git
synced 2024-11-16 17:16:25 +00:00
444 lines
20 KiB
HTML
444 lines
20 KiB
HTML
<?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>Reviewing Berkeley DB log files</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 Installation and Build Guide" />
|
||
<link rel="up" href="debug.html" title="Chapter 3. Debugging Applications" />
|
||
<link rel="prev" href="debug_runtime.html" title="Run-time error information" />
|
||
<link rel="next" href="build_android_intro.html" title="Chapter 4. Building Berkeley DB for Android" />
|
||
</head>
|
||
<body>
|
||
<div xmlns="" class="navheader">
|
||
<div class="libver">
|
||
<p>Library Version 11.2.5.2</p>
|
||
</div>
|
||
<table width="100%" summary="Navigation header">
|
||
<tr>
|
||
<th colspan="3" align="center">Reviewing Berkeley DB log files</th>
|
||
</tr>
|
||
<tr>
|
||
<td width="20%" align="left"><a accesskey="p" href="debug_runtime.html">Prev</a> </td>
|
||
<th width="60%" align="center">Chapter 3.
|
||
Debugging Applications
|
||
</th>
|
||
<td width="20%" align="right"> <a accesskey="n" href="build_android_intro.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="debug_printlog"></a>Reviewing Berkeley DB log files</h2>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="toc">
|
||
<dl>
|
||
<dt>
|
||
<span class="sect2">
|
||
<a href="debug_printlog.html#id3364251">Augmenting the Log for Debugging</a>
|
||
</span>
|
||
</dt>
|
||
<dt>
|
||
<span class="sect2">
|
||
<a href="debug_printlog.html#id3364777">Extracting Committed Transactions and Transaction Status</a>
|
||
</span>
|
||
</dt>
|
||
<dt>
|
||
<span class="sect2">
|
||
<a href="debug_printlog.html#id3364742">Extracting Transaction Histories</a>
|
||
</span>
|
||
</dt>
|
||
<dt>
|
||
<span class="sect2">
|
||
<a href="debug_printlog.html#id3364729">Extracting File Histories</a>
|
||
</span>
|
||
</dt>
|
||
<dt>
|
||
<span class="sect2">
|
||
<a href="debug_printlog.html#id3365288">Extracting Page Histories</a>
|
||
</span>
|
||
</dt>
|
||
<dt>
|
||
<span class="sect2">
|
||
<a href="debug_printlog.html#id3365303">Other log processing tools</a>
|
||
</span>
|
||
</dt>
|
||
</dl>
|
||
</div>
|
||
<p>If you are running with transactions and logging, the <a href="../api_reference/C/db_printlog.html" class="olink">db_printlog</a> utility can be a useful debugging aid. The <a href="../api_reference/C/db_printlog.html" class="olink">db_printlog</a> utility will display the contents of your log files in a human readable (and machine-readable) format.</p>
|
||
<p>The <a href="../api_reference/C/db_printlog.html" class="olink">db_printlog</a> utility will attempt to display any and all log files present in a designated db_home directory. For each log record, the <a href="../api_reference/C/db_printlog.html" class="olink">db_printlog</a> utility will display a line of the form:</p>
|
||
<pre class="programlisting">
|
||
[22][28]db_big: rec: 43 txnid 80000963 prevlsn [21][10483281]
|
||
</pre>
|
||
<p>The opening numbers in square brackets are the <span class="emphasis"><em>log sequence
|
||
number</em></span> (<span class="emphasis"><em>LSN</em></span>) of the log record being displayed. The first
|
||
number indicates the log file in which the record appears, and the
|
||
second number indicates the offset in that file of the record.</p>
|
||
<p>The first character string identifies the particular log operation being
|
||
reported. The log records corresponding to particular operations are
|
||
described following. The rest of the line consists of name/value pairs.</p>
|
||
<p>The rec field indicates the record type (this is used to dispatch records
|
||
in the log to appropriate recovery functions).</p>
|
||
<p>The txnid field identifies the transaction for which this record was
|
||
written. A txnid of 0 means that the record was written outside the
|
||
context of any transaction. You will see these most frequently for
|
||
checkpoints.</p>
|
||
<p>Finally, the prevlsn contains the LSN of the last record for this
|
||
transaction. By following prevlsn fields, you can accumulate all the
|
||
updates for a particular transaction. During normal abort processing,
|
||
this field is used to quickly access all the records for a particular
|
||
transaction.</p>
|
||
<p>After the initial line identifying the record type, each field of the log
|
||
record is displayed, one item per line. There are several fields that
|
||
appear in many different records and a few fields that appear only in
|
||
some records.</p>
|
||
<p>The following table presents each currently written log record type with
|
||
a brief description of the operation it describes. Any of these
|
||
record types may have the string "_debug" appended if they
|
||
were written because <a href="../api_reference/C/dbset_flags.html#dbset_flags_DB_TXN_NOT_DURABLE" class="olink">DB_TXN_NOT_DURABLE</a> was specified and the
|
||
system was configured with <a class="link" href="build_unix_conf.html#build_unix_conf.--enable-diagnostic">--enable-diagnostic</a>.</p>
|
||
<div class="informaltable">
|
||
<table border="1" width="80%">
|
||
<colgroup>
|
||
<col />
|
||
<col />
|
||
</colgroup>
|
||
<thead>
|
||
<tr>
|
||
<th>Log Record Type</th>
|
||
<th>Description</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td>bam_adj</td>
|
||
<td>Used when we insert/remove an index into/from the page header of a Btree page.</td>
|
||
</tr>
|
||
<tr>
|
||
<td>bam_cadjust</td>
|
||
<td>Keeps track of record counts in a Btree or Recno database.</td>
|
||
</tr>
|
||
<tr>
|
||
<td>bam_cdel</td>
|
||
<td>Used to mark a record on a page as deleted.</td>
|
||
</tr>
|
||
<tr>
|
||
<td>bam_curadj</td>
|
||
<td>Used to adjust a cursor location when a nearby record changes in a Btree database.</td>
|
||
</tr>
|
||
<tr>
|
||
<td>bam_merge</td>
|
||
<td>Used to merge two Btree database pages during compaction.</td>
|
||
</tr>
|
||
<tr>
|
||
<td>bam_pgno</td>
|
||
<td>Used to replace a page number in a Btree record.</td>
|
||
</tr>
|
||
<tr>
|
||
<td>bam_rcuradj</td>
|
||
<td>Used to adjust a cursor location when a nearby record changes in a Recno database.</td>
|
||
</tr>
|
||
<tr>
|
||
<td>bam_relink</td>
|
||
<td>Fix leaf page prev/next chain when a page is removed.</td>
|
||
</tr>
|
||
<tr>
|
||
<td>bam_repl</td>
|
||
<td>Describes a replace operation on a record.</td>
|
||
</tr>
|
||
<tr>
|
||
<td>bam_root</td>
|
||
<td>Describes an assignment of a root page.</td>
|
||
</tr>
|
||
<tr>
|
||
<td>bam_rsplit</td>
|
||
<td>Describes a reverse page split.</td>
|
||
</tr>
|
||
<tr>
|
||
<td>bam_split</td>
|
||
<td>Describes a page split.</td>
|
||
</tr>
|
||
<tr>
|
||
<td>crdel_inmem_create</td>
|
||
<td>Record the creation of an in-memory named database.</td>
|
||
</tr>
|
||
<tr>
|
||
<td>crdel_inmem_remove</td>
|
||
<td>Record the removal of an in-memory named database.</td>
|
||
</tr>
|
||
<tr>
|
||
<td>crdel_inmem_rename</td>
|
||
<td>Record the rename of an in-memory named database.</td>
|
||
</tr>
|
||
<tr>
|
||
<td>crdel_metasub</td>
|
||
<td>Describes the creation of a metadata page for a subdatabase.</td>
|
||
</tr>
|
||
<tr>
|
||
<td>db_addrem</td>
|
||
<td>Add or remove an item from a page of duplicates.</td>
|
||
</tr>
|
||
<tr>
|
||
<td>db_big</td>
|
||
<td>Add an item to an overflow page (<span class="emphasis"><em>overflow pages</em></span> contain items too large to place on the main page)</td>
|
||
</tr>
|
||
<tr>
|
||
<td>db_cksum</td>
|
||
<td>Unable to checksum a page.</td>
|
||
</tr>
|
||
<tr>
|
||
<td>db_debug</td>
|
||
<td>Log debugging message.</td>
|
||
</tr>
|
||
<tr>
|
||
<td>db_noop</td>
|
||
<td>This marks an operation that did nothing but update the LSN on a page.</td>
|
||
</tr>
|
||
<tr>
|
||
<td>db_ovref</td>
|
||
<td>Increment or decrement the reference count for a big item.</td>
|
||
</tr>
|
||
<tr>
|
||
<td>db_pg_alloc</td>
|
||
<td>Indicates we allocated a page to a database.</td>
|
||
</tr>
|
||
<tr>
|
||
<td>db_pg_free</td>
|
||
<td>Indicates we freed a page (freed pages are added to a freelist and reused).</td>
|
||
</tr>
|
||
<tr>
|
||
<td>db_pg_freedata</td>
|
||
<td>Indicates we freed a page that still contained data entries (freed pages are added to a freelist and reused.)</td>
|
||
</tr>
|
||
<tr>
|
||
<td>db_pg_init</td>
|
||
<td>Indicates we reinitialized a page during a truncate.</td>
|
||
</tr>
|
||
<tr>
|
||
<td>db_pg_sort</td>
|
||
<td>Sort the free page list and free pages at the end of the file.</td>
|
||
</tr>
|
||
<tr>
|
||
<td>dbreg_register</td>
|
||
<td>Records an open of a file (mapping the filename to a log-id that is used in subsequent log operations).</td>
|
||
</tr>
|
||
<tr>
|
||
<td>fop_create</td>
|
||
<td>Create a file in the file system.</td>
|
||
</tr>
|
||
<tr>
|
||
<td>fop_file_remove</td>
|
||
<td>Remove a name in the file system.</td>
|
||
</tr>
|
||
<tr>
|
||
<td>fop_remove</td>
|
||
<td>Remove a file in the file system.</td>
|
||
</tr>
|
||
<tr>
|
||
<td>fop_rename</td>
|
||
<td>Rename a file in the file system.</td>
|
||
</tr>
|
||
<tr>
|
||
<td>fop_write</td>
|
||
<td>Write bytes to an object in the file system.</td>
|
||
</tr>
|
||
<tr>
|
||
<td>ham_chgpg</td>
|
||
<td>Used to adjust a cursor location when a Hash page is removed, and its elements are moved to a different Hash page.</td>
|
||
</tr>
|
||
<tr>
|
||
<td>ham_copypage</td>
|
||
<td>Used when we empty a bucket page, but there are overflow pages for the bucket; one needs to be copied back into the actual bucket.</td>
|
||
</tr>
|
||
<tr>
|
||
<td>ham_curadj</td>
|
||
<td>Used to adjust a cursor location when a nearby record changes in a Hash database.</td>
|
||
</tr>
|
||
<tr>
|
||
<td>ham_groupalloc</td>
|
||
<td>Allocate some number of contiguous pages to the Hash database.</td>
|
||
</tr>
|
||
<tr>
|
||
<td>ham_insdel</td>
|
||
<td>Insert/delete an item on a Hash page.</td>
|
||
</tr>
|
||
<tr>
|
||
<td>ham_metagroup</td>
|
||
<td>Update the metadata page to reflect the allocation of a sequence of contiguous pages.</td>
|
||
</tr>
|
||
<tr>
|
||
<td>ham_newpage</td>
|
||
<td>Adds or removes overflow pages from a Hash bucket.</td>
|
||
</tr>
|
||
<tr>
|
||
<td>ham_replace</td>
|
||
<td>Handle updates to records that are on the main page.</td>
|
||
</tr>
|
||
<tr>
|
||
<td>ham_splitdata</td>
|
||
<td>Record the page data for a split.</td>
|
||
</tr>
|
||
<tr>
|
||
<td>qam_add</td>
|
||
<td>Describes the actual addition of a new record to a Queue.</td>
|
||
</tr>
|
||
<tr>
|
||
<td>qam_del</td>
|
||
<td>Delete a record in a Queue.</td>
|
||
</tr>
|
||
<tr>
|
||
<td>qam_delext</td>
|
||
<td>Delete a record in a Queue with extents.</td>
|
||
</tr>
|
||
<tr>
|
||
<td>qam_incfirst</td>
|
||
<td>Increments the record number that refers to the first record in the database.</td>
|
||
</tr>
|
||
<tr>
|
||
<td>qam_mvptr</td>
|
||
<td>Indicates we changed the reference to either or both of the first and current records in the file.</td>
|
||
</tr>
|
||
<tr>
|
||
<td>txn_child</td>
|
||
<td>Commit a child transaction.</td>
|
||
</tr>
|
||
<tr>
|
||
<td>txn_ckp</td>
|
||
<td>Transaction checkpoint.</td>
|
||
</tr>
|
||
<tr>
|
||
<td>txn_recycle</td>
|
||
<td>Transaction IDs wrapped.</td>
|
||
</tr>
|
||
<tr>
|
||
<td>txn_regop</td>
|
||
<td>Logs a regular (non-child) transaction commit.</td>
|
||
</tr>
|
||
<tr>
|
||
<td>txn_xa_regop</td>
|
||
<td>Logs a prepare message.</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
</div>
|
||
<div class="sect2" lang="en" xml:lang="en">
|
||
<div class="titlepage">
|
||
<div>
|
||
<div>
|
||
<h3 class="title"><a id="id3364251"></a>Augmenting the Log for Debugging</h3>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<p>When debugging applications, it is sometimes useful to log not only the
|
||
actual operations that modify pages, but also the underlying Berkeley DB
|
||
functions being executed. This form of logging can add significant bulk
|
||
to your log, but can permit debugging application errors that are almost
|
||
impossible to find any other way. To turn on these log messages, specify
|
||
the --enable-debug_rop and --enable-debug_wop configuration options when
|
||
configuring Berkeley DB. See <a class="xref" href="build_unix_conf.html" title="Configuring Berkeley DB">Configuring Berkeley DB</a> for more information.</p>
|
||
</div>
|
||
<div class="sect2" lang="en" xml:lang="en">
|
||
<div class="titlepage">
|
||
<div>
|
||
<div>
|
||
<h3 class="title"><a id="id3364777"></a>Extracting Committed Transactions and Transaction Status</h3>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<p>Sometimes, it is helpful to use the human-readable log output to
|
||
determine which transactions committed and aborted. The awk script,
|
||
commit.awk, (found in the db_printlog directory of the Berkeley DB
|
||
distribution) allows you to do just that. The following command,
|
||
where log_output is the output of db_printlog, will display a list of
|
||
the transaction IDs of all committed transactions found in the log:</p>
|
||
<pre class="programlisting">awk -f commit.awk log_output</pre>
|
||
<p>If you need a complete list of both committed and aborted transactions,
|
||
then the script status.awk will produce it. The syntax is as follows:</p>
|
||
<pre class="programlisting">awk -f status.awk log_output</pre>
|
||
</div>
|
||
<div class="sect2" lang="en" xml:lang="en">
|
||
<div class="titlepage">
|
||
<div>
|
||
<div>
|
||
<h3 class="title"><a id="id3364742"></a>Extracting Transaction Histories</h3>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<p>Another useful debugging aid is to print out the complete history of a transaction. The awk script txn.awk allows you to do that. The following command line, where log_output is the output of the <a href="../api_reference/C/db_printlog.html" class="olink">db_printlog</a> utility and txnlist is a comma-separated list of transaction IDs, will display all log records associated with the designated transaction ids:</p>
|
||
<pre class="programlisting">awk -f txn.awk TXN=txnlist log_output</pre>
|
||
</div>
|
||
<div class="sect2" lang="en" xml:lang="en">
|
||
<div class="titlepage">
|
||
<div>
|
||
<div>
|
||
<h3 class="title"><a id="id3364729"></a>Extracting File Histories</h3>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<p>The awk script fileid.awk allows you to extract all log records that
|
||
refer to a designated file. The syntax for the fileid.awk script is
|
||
the following, where log_output is the output of db_printlog and fids
|
||
is a comma-separated list of fileids:</p>
|
||
<pre class="programlisting">awk -f fileid.awk PGNO=fids log_output</pre>
|
||
</div>
|
||
<div class="sect2" lang="en" xml:lang="en">
|
||
<div class="titlepage">
|
||
<div>
|
||
<div>
|
||
<h3 class="title"><a id="id3365288"></a>Extracting Page Histories</h3>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<p>The awk script pgno.awk allows you to extract all log records that refer
|
||
to designated page numbers. However, because this script will extract
|
||
records with the designated page numbers for all files, it is most
|
||
useful in conjunction with the fileid script. The syntax for the
|
||
pgno.awk script is the following, where log_output is the output of
|
||
db_printlog and pgnolist is a comma-separated list of page numbers:</p>
|
||
<pre class="programlisting">awk -f pgno.awk PGNO=pgnolist log_output</pre>
|
||
</div>
|
||
<div class="sect2" lang="en" xml:lang="en">
|
||
<div class="titlepage">
|
||
<div>
|
||
<div>
|
||
<h3 class="title"><a id="id3365303"></a>Other log processing tools</h3>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<p>The awk script count.awk prints out the number of log records
|
||
encountered that belonged to some transaction (that is, the number of
|
||
log records excluding those for checkpoints and
|
||
non-transaction-protected operations).</p>
|
||
<p>The script range.awk will extract a subset of a log. This is useful when the output of <a href="../api_reference/C/db_printlog.html" class="olink">db_printlog</a> utility is too large to be reasonably manipulated with an editor or other tool. The syntax for range.awk is the following, where <span class="bold"><strong>sf</strong></span> and <span class="bold"><strong>so</strong></span> represent the LSN of the beginning of the sublog you want to extract, and <span class="bold"><strong>ef</strong></span> and <span class="bold"><strong>eo</strong></span> represent the LSN of the end of the sublog you want to extract:</p>
|
||
<pre class="programlisting"> awk -f range.awk START_FILE=sf START_OFFSET=so END_FILE=ef \
|
||
END_OFFSET=eo log_output </pre>
|
||
</div>
|
||
</div>
|
||
<div class="navfooter">
|
||
<hr />
|
||
<table width="100%" summary="Navigation footer">
|
||
<tr>
|
||
<td width="40%" align="left"><a accesskey="p" href="debug_runtime.html">Prev</a> </td>
|
||
<td width="20%" align="center">
|
||
<a accesskey="u" href="debug.html">Up</a>
|
||
</td>
|
||
<td width="40%" align="right"> <a accesskey="n" href="build_android_intro.html">Next</a></td>
|
||
</tr>
|
||
<tr>
|
||
<td width="40%" align="left" valign="top">Run-time error information </td>
|
||
<td width="20%" align="center">
|
||
<a accesskey="h" href="index.html">Home</a>
|
||
</td>
|
||
<td width="40%" align="right" valign="top"> Chapter 4. Building Berkeley DB for Android</td>
|
||
</tr>
|
||
</table>
|
||
</div>
|
||
</body>
|
||
</html>
|