mirror of
https://github.com/yasuhirokimura/db18
synced 2026-06-08 18:29:23 +00:00
578 lines
22 KiB
HTML
578 lines
22 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_win.html" title="Chapter 4. Building Berkeley DB for Windows" />
|
||
</head>
|
||
<body>
|
||
<div xmlns="" class="navheader">
|
||
<div class="libver">
|
||
<p>Library Version 18.1.40</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_win.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#idm140649574887408">Augmenting the Log for Debugging</a>
|
||
</span>
|
||
</dt>
|
||
<dt>
|
||
<span class="sect2">
|
||
<a href="debug_printlog.html#idm140649575218160">Extracting Committed Transactions and Transaction Status</a>
|
||
</span>
|
||
</dt>
|
||
<dt>
|
||
<span class="sect2">
|
||
<a href="debug_printlog.html#idm140649575129712">Extracting Transaction Histories</a>
|
||
</span>
|
||
</dt>
|
||
<dt>
|
||
<span class="sect2">
|
||
<a href="debug_printlog.html#idm140649575143200">Extracting File Histories</a>
|
||
</span>
|
||
</dt>
|
||
<dt>
|
||
<span class="sect2">
|
||
<a href="debug_printlog.html#idm140649575012496">Extracting Page Histories</a>
|
||
</span>
|
||
</dt>
|
||
<dt>
|
||
<span class="sect2">
|
||
<a href="debug_printlog.html#idm140649574800944">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>heap_addrem</td>
|
||
<td>Add or remove an entry from a Heap
|
||
database.</td>
|
||
</tr>
|
||
<tr>
|
||
<td>heap_pg_alloc</td>
|
||
<td>Indicates we allocated a page to a Heap
|
||
database.</td>
|
||
</tr>
|
||
<tr>
|
||
<td>heap_trunc_meta</td>
|
||
<td>Records the truncation of the meta page in
|
||
a Heap database.</td>
|
||
</tr>
|
||
<tr>
|
||
<td>heap_trunc_page</td>
|
||
<td>Records the truncation of a data page in a
|
||
Heap database.</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="idm140649574887408"></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="idm140649575218160"></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="idm140649575129712"></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="idm140649575143200"></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="idm140649575012496"></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="idm140649574800944"></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_win.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 Windows </td>
|
||
</tr>
|
||
</table>
|
||
</div>
|
||
</body>
|
||
</html>
|