📄 profiledata.html
字号:
<?xml version="1.0" ?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<!-- saved from url=(0017)http://localhost/ -->
<script language="JavaScript" src="../../displayToc.js"></script>
<script language="JavaScript" src="../../tocParas.js"></script>
<script language="JavaScript" src="../../tocTab.js"></script>
<link rel="stylesheet" type="text/css" href="../../scineplex.css">
<title>DBI::ProfileData - manipulate DBI::ProfileDumper data dumps</title>
<link rel="stylesheet" href="../../Active.css" type="text/css" />
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<link rev="made" href="mailto:" />
</head>
<body>
<script>writelinks('__top__',2);</script>
<h1><a>DBI::ProfileData - manipulate DBI::ProfileDumper data dumps</a></h1>
<p><a name="__index__"></a></p>
<!-- INDEX BEGIN -->
<ul>
<li><a href="#name">NAME</a></li>
<li><a href="#synopsis">SYNOPSIS</a></li>
<li><a href="#description">DESCRIPTION</a></li>
<li><a href="#methods">METHODS</a></li>
<li><a href="#author">AUTHOR</a></li>
<li><a href="#copyright_and_license">COPYRIGHT AND LICENSE</a></li>
</ul>
<!-- INDEX END -->
<hr />
<p>
</p>
<h1><a name="name">NAME</a></h1>
<p>DBI::ProfileData - manipulate DBI::ProfileDumper data dumps</p>
<p>
</p>
<hr />
<h1><a name="synopsis">SYNOPSIS</a></h1>
<p>The easiest way to use this module is through the dbiprof frontend
(see <a href="../../bin/dbiprof.html">the dbiprof manpage</a> for details):</p>
<pre>
dbiprof --number 15 --sort count</pre>
<p>This module can also be used to roll your own profile analysis:</p>
<pre>
<span class="comment"># load data from dbi.prof</span>
<span class="variable">$prof</span> <span class="operator">=</span> <span class="variable">DBI::ProfileData</span><span class="operator">-></span><span class="variable">new</span><span class="operator">(</span><span class="string">File</span> <span class="operator">=></span> <span class="string">"dbi.prof"</span><span class="operator">);</span>
</pre>
<pre>
<span class="comment"># get a count of the records in the data set</span>
<span class="variable">$count</span> <span class="operator">=</span> <span class="variable">$prof</span><span class="operator">-></span><span class="variable">count</span><span class="operator">();</span>
</pre>
<pre>
<span class="comment"># sort by longest overall time</span>
<span class="variable">$prof</span><span class="operator">-></span><span class="keyword">sort</span><span class="operator">(</span><span class="string">field</span> <span class="operator">=></span> <span class="string">"longest"</span><span class="operator">);</span>
</pre>
<pre>
<span class="comment"># sort by longest overall time, least to greatest</span>
<span class="variable">$prof</span><span class="operator">-></span><span class="keyword">sort</span><span class="operator">(</span><span class="string">field</span> <span class="operator">=></span> <span class="string">"longest"</span><span class="operator">,</span> <span class="string">reverse</span> <span class="operator">=></span> <span class="number">1</span><span class="operator">);</span>
</pre>
<pre>
<span class="comment"># exclude records with key2 eq 'disconnect'</span>
<span class="variable">$prof</span><span class="operator">-></span><span class="variable">exclude</span><span class="operator">(</span><span class="string">key2</span> <span class="operator">=></span> <span class="string">'disconnect'</span><span class="operator">);</span>
</pre>
<pre>
<span class="comment"># exclude records with key1 matching /^UPDATE/i</span>
<span class="variable">$prof</span><span class="operator">-></span><span class="variable">exclude</span><span class="operator">(</span><span class="string">key1</span> <span class="operator">=></span> <span class="string">qr/^UPDATE/i</span><span class="operator">);</span>
</pre>
<pre>
<span class="comment"># remove all records except those where key1 matches /^SELECT/i</span>
<span class="variable">$prof</span><span class="operator">-></span><span class="variable">match</span><span class="operator">(</span><span class="string">key1</span> <span class="operator">=></span> <span class="string">qr/^SELECT/i</span><span class="operator">);</span>
</pre>
<pre>
<span class="comment"># produce a formatted report with the given number of items</span>
<span class="variable">$report</span> <span class="operator">=</span> <span class="variable">$prof</span><span class="operator">-></span><span class="variable">report</span><span class="operator">(</span><span class="string">number</span> <span class="operator">=></span> <span class="number">10</span><span class="operator">);</span>
</pre>
<pre>
<span class="comment"># clone the profile data set</span>
<span class="variable">$clone</span> <span class="operator">=</span> <span class="variable">$prof</span><span class="operator">-></span><span class="variable">clone</span><span class="operator">();</span>
</pre>
<pre>
<span class="comment"># get access to hash of header values</span>
<span class="variable">$header</span> <span class="operator">=</span> <span class="variable">$prof</span><span class="operator">-></span><span class="variable">header</span><span class="operator">();</span>
</pre>
<pre>
<span class="comment"># get access to sorted array of nodes</span>
<span class="variable">$nodes</span> <span class="operator">=</span> <span class="variable">$prof</span><span class="operator">-></span><span class="variable">nodes</span><span class="operator">();</span>
</pre>
<pre>
<span class="comment"># format a single node in the same style as report()</span>
<span class="variable">$text</span> <span class="operator">=</span> <span class="variable">$prof</span><span class="operator">-></span><span class="keyword">format</span><span class="operator">(</span><span class="variable">$nodes</span><span class="operator">-></span><span class="operator">[</span><span class="number">0</span><span class="operator">]</span><span class="operator">);</span>
</pre>
<pre>
<span class="comment"># get access to Data hash in DBI::Profile format</span>
<span class="variable">$Data</span> <span class="operator">=</span> <span class="variable">$prof</span><span class="operator">-></span><span class="variable">Data</span><span class="operator">();</span>
</pre>
<p>
</p>
<hr />
<h1><a name="description">DESCRIPTION</a></h1>
<p>This module offers the ability to read, manipulate and format
DBI::ProfileDumper profile data.</p>
<p>Conceptually, a profile consists of a series of records, or nodes,
each of each has a set of statistics and set of keys. Each record
must have a unique set of keys, but there is no requirement that every
record have the same number of keys.</p>
<p>
</p>
<hr />
<h1><a name="methods">METHODS</a></h1>
<p>The following methods are supported by DBI::ProfileData objects.</p>
<dl>
<dt><strong><a name="item_new">$prof = DBI::ProfileData->new(File => "dbi.prof")</a></strong>
<dt><strong>$prof = DBI::ProfileData->new(File => "dbi.prof", Filter => sub { ... })</strong>
<dt><strong>$prof = DBI::ProfileData->new(Files => [ "dbi.prof.1", "dbi.prof.2" ])</strong>
<dd>
<p>Creates a a new DBI::ProfileData object. Takes either a single file
through the File option or a list of Files in an array ref. If
multiple files are specified then the header data from the first file
is used.</p>
</dd>
<dd>
<p>The <code>Filter</code> parameter can be used to supply a code reference that can
manipulate the profile data as it is being read. This is most useful for
editing SQL statements so that slightly different statements in the raw data
will be merged and aggregated in the loaded data. For example:</p>
</dd>
<dd>
<pre>
<span class="string">Filter</span> <span class="operator">=></span> <span class="keyword">sub</span><span class="variable"> </span><span class="operator">{</span>
<span class="keyword">my</span> <span class="operator">(</span><span class="variable">$path_ref</span><span class="operator">,</span> <span class="variable">$data_ref</span><span class="operator">)</span> <span class="operator">=</span> <span class="variable">@_</span><span class="operator">;</span>
<span class="regex">s/foo = '.*?'/foo = '...'/</span> <span class="keyword">for</span> <span class="variable">@$path_ref</span><span class="operator">;</span>
<span class="operator">}</span>
</pre>
</dd>
<dd>
<p>Here's an example that performs some normalization on the SQL. It converts all
numbers to <code>N</code> and all quoted strings to <code>S</code>. It can also convert digits to
N within names. Finally, it summarizes long "IN (...)" clauses.</p>
</dd>
<dd>
<p>It's aggressive and simplistic, but it's often sufficient, and serves as an
example that you can tailor to suit your own needs:</p>
</dd>
<dd>
<pre>
<span class="string">Filter</span> <span class="operator">=></span> <span class="keyword">sub</span><span class="variable"> </span><span class="operator">{</span>
<span class="keyword">my</span> <span class="operator">(</span><span class="variable">$path_ref</span><span class="operator">,</span> <span class="variable">$data_ref</span><span class="operator">)</span> <span class="operator">=</span> <span class="variable">@_</span><span class="operator">;</span>
<span class="keyword">local</span> <span class="variable">$_</span> <span class="operator">=</span> <span class="variable">$path_ref</span><span class="operator">-></span><span class="operator">[</span><span class="number">0</span><span class="operator">]</span><span class="operator">;</span> <span class="comment"># whichever element contains the SQL Statement</span>
<span class="regex">s/\b\d+\b/N/g</span><span class="operator">;</span> <span class="comment"># 42 -> N</span>
<span class="regex">s/\b0x[0-9A-Fa-f]+\b/N/g</span><span class="operator">;</span> <span class="comment"># 0xFE -> N</span>
<span class="regex">s/'.*?'/'S'/g</span><span class="operator">;</span> <span class="comment"># single quoted strings (doesn't handle escapes)</span>
<span class="regex">s/".*?"/"S"/g</span><span class="operator">;</span> <span class="comment"># double quoted strings (doesn't handle escapes)</span>
<span class="comment"># convert names like log_20001231 into log_NNNNNNNN, controlled by $opt{n}</span>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -