forked from docs/doc-exports
Reviewed-by: Pruthi, Vineet <vineet.pruthi@t-systems.com> Co-authored-by: Lu, Huayi <luhuayi@huawei.com> Co-committed-by: Lu, Huayi <luhuayi@huawei.com>
58 lines
11 KiB
HTML
58 lines
11 KiB
HTML
<a name="EN-US_TOPIC_0000001233563191"></a><a name="EN-US_TOPIC_0000001233563191"></a>
|
|
|
|
<h1 class="topictitle1">Querying SQL Statements That Affect Performance Most</h1>
|
|
<div id="body8662426"><p id="EN-US_TOPIC_0000001233563191__p66522913503">This section describes how to query SQL statements whose execution takes a long time, leading to poor system performance.</p>
|
|
<div class="section" id="EN-US_TOPIC_0000001233563191__s96b20407a6b448938ac41f358a482f53"><h4 class="sectiontitle">Procedure</h4><ol id="EN-US_TOPIC_0000001233563191__o3bb7600b015f47ec9fab7464df6c61f7"><li id="EN-US_TOPIC_0000001233563191__l4724b1730f2c47469dc22a7ea62487c3"><span>Query the statements that are run for a long time in the database.</span><p><div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001233563191__s3f6201fcf40a44dd807c33aae2cad3b1"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span></pre></div></td><td class="code"><div><pre><span></span><span class="k">SELECT</span><span class="w"> </span><span class="k">current_timestamp</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="n">query_start</span><span class="w"> </span><span class="k">AS</span><span class="w"> </span><span class="n">runtime</span><span class="p">,</span><span class="w"> </span><span class="n">datname</span><span class="p">,</span><span class="w"> </span><span class="n">usename</span><span class="p">,</span><span class="w"> </span><span class="n">query</span><span class="w"> </span><span class="k">FROM</span><span class="w"> </span><span class="n">pg_stat_activity</span><span class="w"> </span><span class="k">where</span><span class="w"> </span><span class="k">state</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="s1">'idle'</span><span class="w"> </span><span class="k">ORDER</span><span class="w"> </span><span class="k">BY</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="k">desc</span><span class="p">;</span>
|
|
</pre></div></td></tr></table></div>
|
|
|
|
</div>
|
|
<p id="EN-US_TOPIC_0000001233563191__a40eee443f2044ca5bc034e9803d72b9c">After the query, query statements are returned as a list, ranked by execution time in descending order. The first result is the query statement that has the longest execution time in the system. The returned result contains the SQL statement invoked by the system and the SQL statement run by users. Find the statements that were run by users and took a long time.</p>
|
|
<div class="p" id="EN-US_TOPIC_0000001233563191__a710ea85d6ee2441081fcdb98b9c4d714">Alternatively, you can set <strong id="EN-US_TOPIC_0000001233563191__b84235270610159">current_timestamp - query_start</strong> to be greater than a threshold to identify query statements that are executed for a duration longer than this threshold.<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001233563191__s8fa5a4c9c0a24e1da861ae3437f606b8"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span></pre></div></td><td class="code"><div><pre><span></span><span class="k">SELECT</span><span class="w"> </span><span class="n">query</span><span class="w"> </span><span class="k">FROM</span><span class="w"> </span><span class="n">pg_stat_activity</span><span class="w"> </span><span class="k">WHERE</span><span class="w"> </span><span class="k">current_timestamp</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="n">query_start</span><span class="w"> </span><span class="o">></span><span class="w"> </span><span class="nb">interval</span><span class="w"> </span><span class="s1">'1 days'</span><span class="p">;</span>
|
|
</pre></div></td></tr></table></div>
|
|
|
|
</div>
|
|
</div>
|
|
</p></li><li id="EN-US_TOPIC_0000001233563191__l9a276ec66df4428994cad17f396ebf8d"><span>Set the parameter <strong id="EN-US_TOPIC_0000001233563191__b84235270617325">track_activities</strong> to <strong id="EN-US_TOPIC_0000001233563191__b84235270617331">on</strong>.</span><p><div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001233563191__s7f714c8906d9408497b45a15cec92a74"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span></pre></div></td><td class="code"><div><pre><span></span><span class="k">SET</span><span class="w"> </span><span class="n">track_activities</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">on</span><span class="p">;</span>
|
|
</pre></div></td></tr></table></div>
|
|
|
|
</div>
|
|
<p id="EN-US_TOPIC_0000001233563191__ae4efd09f0f33450a969acc89dcf45a1e">The database collects the running information about active queries only if the parameter is set to <strong id="EN-US_TOPIC_0000001233563191__b842352706102059">on</strong>.</p>
|
|
</p></li><li id="EN-US_TOPIC_0000001233563191__l67f14c9d551742289424df274d1f6daf"><span>View the running query statements.</span><p><p id="EN-US_TOPIC_0000001233563191__a1af9d10bf9b64be3a3a9af29c53e3977">Viewing <strong id="EN-US_TOPIC_0000001233563191__b84235270610275">pg_stat_activity</strong> is used as an example here.</p>
|
|
<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001233563191__s128a693f6a494e09bf130e2f983befee"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span>
|
|
<span class="normal">2</span>
|
|
<span class="normal">3</span>
|
|
<span class="normal">4</span>
|
|
<span class="normal">5</span>
|
|
<span class="normal">6</span></pre></div></td><td class="code"><div><pre><span></span><span class="k">SELECT</span><span class="w"> </span><span class="n">datname</span><span class="p">,</span><span class="w"> </span><span class="n">usename</span><span class="p">,</span><span class="w"> </span><span class="k">state</span><span class="w"> </span><span class="k">FROM</span><span class="w"> </span><span class="n">pg_stat_activity</span><span class="p">;</span>
|
|
<span class="w"> </span><span class="n">datname</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">usename</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="k">state</span><span class="w"> </span><span class="o">|</span>
|
|
<span class="c1">----------+---------+--------+</span>
|
|
<span class="w"> </span><span class="n">postgres</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">omm</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">idle</span><span class="w"> </span><span class="o">|</span>
|
|
<span class="w"> </span><span class="n">postgres</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">omm</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">active</span><span class="w"> </span><span class="o">|</span>
|
|
<span class="p">(</span><span class="mi">2</span><span class="w"> </span><span class="k">rows</span><span class="p">)</span>
|
|
</pre></div></td></tr></table></div>
|
|
|
|
</div>
|
|
<p id="EN-US_TOPIC_0000001233563191__ab98749725d734d8fa566d4295f788bb4">If the <strong id="EN-US_TOPIC_0000001233563191__b84235270617455">state</strong> column is idle, the connection is idle and requires a user to enter a command.</p>
|
|
<p id="EN-US_TOPIC_0000001233563191__ae23853bc83c24303b03fc4a83a6adba7">To identify only active query statements, run the following command:</p>
|
|
<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001233563191__sc60496ad01044b00b4aea82e956d020d"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span></pre></div></td><td class="code"><div><pre><span></span><span class="k">SELECT</span><span class="w"> </span><span class="n">datname</span><span class="p">,</span><span class="w"> </span><span class="n">usename</span><span class="p">,</span><span class="w"> </span><span class="k">state</span><span class="w"> </span><span class="k">FROM</span><span class="w"> </span><span class="n">pg_stat_activity</span><span class="w"> </span><span class="k">WHERE</span><span class="w"> </span><span class="k">state</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="s1">'idle'</span><span class="p">;</span>
|
|
</pre></div></td></tr></table></div>
|
|
|
|
</div>
|
|
</p></li><li id="EN-US_TOPIC_0000001233563191__l1e56caf6c0934fe7b822cff9168bf820"><span>Analyze the status of the query statements that were run for a long time.</span><p><ul id="EN-US_TOPIC_0000001233563191__ubc1d52ca5ca54381a9d8d009b356492f"><li id="EN-US_TOPIC_0000001233563191__l4cc14fc77a21403bbccc687706eb61ab">If the query statement is normal, wait until the execution is complete.</li><li id="EN-US_TOPIC_0000001233563191__le1a6c6a89c7b45448e5b24637389eaa0">If a query statement is blocked, run the following command to view this query statement:<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001233563191__s78d88865acf345d9a82dd82e8b280f79"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span></pre></div></td><td class="code"><div><pre><span></span><span class="k">SELECT</span><span class="w"> </span><span class="n">datname</span><span class="p">,</span><span class="w"> </span><span class="n">usename</span><span class="p">,</span><span class="w"> </span><span class="k">state</span><span class="p">,</span><span class="w"> </span><span class="n">query</span><span class="w"> </span><span class="k">FROM</span><span class="w"> </span><span class="n">pg_stat_activity</span><span class="w"> </span><span class="k">WHERE</span><span class="w"> </span><span class="n">waiting</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">true</span><span class="p">;</span>
|
|
</pre></div></td></tr></table></div>
|
|
|
|
</div>
|
|
<p id="EN-US_TOPIC_0000001233563191__aaf8b87891abb484c877b6dc39ed344bf">The command output lists a query statement in the block state. The lock resource requested by this query statement is occupied by another session, so this query statement is waiting for the session to release the lock resource.</p>
|
|
<div class="note" id="EN-US_TOPIC_0000001233563191__n15fc842441364934a145ca59fc26e81f"><img src="public_sys-resources/note_3.0-en-us.png"><span class="notetitle"> </span><div class="notebody"><p id="EN-US_TOPIC_0000001233563191__aa99d1e5dd808426aa65971ec0d158f8c">Only when the query is blocked by internal lock resources, the <strong id="EN-US_TOPIC_0000001233563191__b842352706111225">waiting</strong> field is <strong id="EN-US_TOPIC_0000001233563191__b842352706111228">true</strong>. In most cases, block happens when query statements are waiting for lock resources to be released. However, query statements may be blocked because they are waiting to write in files or for timers. Such blocked queries are not displayed in the <strong id="EN-US_TOPIC_0000001233563191__b842352706112114">pg_stat_activity</strong> view.</p>
|
|
</div></div>
|
|
</li></ul>
|
|
</p></li></ol>
|
|
</div>
|
|
</div>
|
|
<div>
|
|
<div class="familylinks">
|
|
<div class="parentlink"><strong>Parent topic:</strong> <a href="dws_04_0403.html">Determining the Performance Optimization Scope</a></div>
|
|
</div>
|
|
</div>
|
|
|