<div class="entry" style="margin:20px 0px 5px;padding:0px 0px 5px;border-bottom-width:1px;border-bottom-style:dashed;border-bottom-color:#CCCCCC;color:#333333;font-family:'Lucida Grande', 'Segoe UI', 'Bitstream Vera Sans', Tahoma, Verdana, Arial, sans-serif;font-size:13px;line-height:20.7999992370605px;white-space:normal;background-color:#FFFFFF;">
<p style="padding-top:5px;padding-right:20px;padding-bottom:5px;">
一个电信运营商客户的核心交易系统,临时表空间大量被占用,临时表空间被撑到了600GB。这样的问题复杂吗?取决于很多因素,不过今天所要讲的案例,并不复杂,如果我们对临时表空间在何种情况下使用有足够了解。
</p>
<p style="padding-top:5px;padding-right:20px;padding-bottom:5px;">
首先,我们要去检查是什么会话占用了临时表空间,具体占用了多少,临时段的具体类型是什么。正如我们要想知道这个月的花费过大,去分析原因时就要去看是哪些开销过大、开销了多少金额、开销的用途等。
</p>
<p style="padding-top:5px;padding-right:20px;padding-bottom:5px;">
这个步骤比较简单,查询v$sort_usage就可以了:
</p>
<div class="dp-highlighter" style="margin:18px 0px;padding:1px 0px 0px;font-family:Consolas, 'Courier New', Courier, mono;font-size:12px;width:653.390625px;overflow:auto;background-color:#E7E5DC;">
<div class="bar" style="margin:0px;padding:0px 0px 0px 45px;">
<div class="tools" style="margin:0px;padding:3px 8px 10px 10px;font-stretch:normal;font-size:9px;line-height:normal;font-family:Verdana, Geneva, Arial, Helvetica, sans-serif;color:silver;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;background-color:#F8F8F8;">
<a href="http://www.laoxiong.net/temporary_tablespace_excessive_usage_case.html#" style="margin:0px 10px 0px 0px;padding:0px;color:#A0A0A0;text-decoration:none;outline-color:invert;outline-style:none;font-size:9px;">view plain</a><a href="http://www.laoxiong.net/temporary_tablespace_excessive_usage_case.html#" style="margin:0px 10px 0px 0px;padding:0px;color:#A0A0A0;text-decoration:none;outline-color:invert;outline-style:none;font-size:9px;">copy to clipboard</a><a href="http://www.laoxiong.net/temporary_tablespace_excessive_usage_case.html#" style="margin:0px 10px 0px 0px;padding:0px;color:#A0A0A0;text-decoration:none;outline-color:invert;outline-style:none;font-size:9px;">print</a><a href="http://www.laoxiong.net/temporary_tablespace_excessive_usage_case.html#" style="margin:0px 10px 0px 0px;padding:0px;color:#A0A0A0;text-decoration:none;outline-color:invert;outline-style:none;font-size:9px;">?</a>
</div>
</div>
<ol start="1" class="dp-sql" style="margin:0px 0px 1px 45px;padding:0px;list-style:decimal-leading-zero;color:#5C5C5C;background-color:#FFFFFF;">
<li class="alt" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;">
<span style="margin:0px;padding:0px;color:black;"><span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">select</span><span style="margin:0px;padding:0px;"> * </span><span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">from</span><span style="margin:0px;padding:0px;"> </span></span>
</li>
<li class="" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;background-color:#F8F8F8;">
<span style="margin:0px;padding:0px;color:black;">(<span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">select</span><span style="margin:0px;padding:0px;"> username,session_addr,sql_id,contents,segtype,blocks*8/1024/1024 gb </span></span>
</li>
<li class="alt" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;">
<span style="margin:0px;padding:0px;color:black;"><span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">from</span><span style="margin:0px;padding:0px;"> v$sort_usage </span><span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">order</span><span style="margin:0px;padding:0px;"> </span><span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">by</span><span style="margin:0px;padding:0px;"> blocks </span><span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">desc</span><span style="margin:0px;padding:0px;">) </span></span>
</li>
<li class="" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;background-color:#F8F8F8;">
<span style="margin:0px;padding:0px;color:black;"><span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">where</span><span style="margin:0px;padding:0px;"> rownum<=200; </span></span>
</li>
<li class="alt" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;">
<span style="margin:0px;padding:0px;color:black;"> </span>
</li>
<li class="" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;background-color:#F8F8F8;">
<span style="margin:0px;padding:0px;color:black;">USERNAME SESSION_ADDR SQL_ID CONTENTS SEGTYPE GB </span>
</li>
<li class="alt" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;">
<span style="margin:0px;padding:0px;color:black;"><span class="comment" style="margin:0px;padding:0px;color:#008200;">---------- ---------------- ------------- --------- --------- -----------</span><span style="margin:0px;padding:0px;"> </span></span>
</li>
<li class="" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;background-color:#F8F8F8;">
<span style="margin:0px;padding:0px;color:black;">XXXX 0700002949BCD8A0 291nk7db4bwdh <span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">TEMPORARY</span><span style="margin:0px;padding:0px;"> SORT .9677734375 </span></span>
</li>
<li class="alt" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;">
<span style="margin:0px;padding:0px;color:black;">XXXX 070000294BD99628 291nk7db4bwdh <span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">TEMPORARY</span><span style="margin:0px;padding:0px;"> SORT .9677734375 </span></span>
</li>
<li class="" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;background-color:#F8F8F8;">
<span style="margin:0px;padding:0px;color:black;">XXXX 070000294CD10480 291nk7db4bwdh <span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">TEMPORARY</span><span style="margin:0px;padding:0px;"> SORT .9677734375 </span></span>
</li>
<li class="alt" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;">
<span style="margin:0px;padding:0px;color:black;">XXXX 070000294DD1AC88 291nk7db4bwdh <span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">TEMPORARY</span><span style="margin:0px;padding:0px;"> SORT .9677734375 </span></span>
</li>
<li class="" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;background-color:#F8F8F8;">
<span style="margin:0px;padding:0px;color:black;">XXXX 070000294CD68D70 291nk7db4bwdh <span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">TEMPORARY</span><span style="margin:0px;padding:0px;"> SORT .9677734375 </span></span>
</li>
<li class="alt" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;">
<span style="margin:0px;padding:0px;color:black;">XXXX 070000294DBDF760 291nk7db4bwdh <span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">TEMPORARY</span><span style="margin:0px;padding:0px;"> SORT .9677734375 </span></span>
</li>
<li class="" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;background-color:#F8F8F8;">
<span style="margin:0px;padding:0px;color:black;">XXXX 070000294EDB5D10 291nk7db4bwdh <span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">TEMPORARY</span><span style="margin:0px;padding:0px;"> SORT .9677734375 </span></span>
</li>
<li class="alt" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;">
<span style="margin:0px;padding:0px;color:black;">XXXX 070000294FD7D818 291nk7db4bwdh <span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">TEMPORARY</span><span style="margin:0px;padding:0px;"> SORT .9677734375 </span></span>
</li>
<li class="" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;background-color:#F8F8F8;">
<span style="margin:0px;padding:0px;color:black;">...结果较多,忽略部分输出... </span>
</li>
</ol>
</div>
<p style="padding-top:5px;padding-right:20px;padding-bottom:5px;">
SQL_ID都是一样的,那这个SQL是否有其特殊性呢?SEGTYPE为SORT表明这个临时段是“排序段”,用于SQL排序,大小居然也是一样,会话占用的临时段大小将近1GB,几百个会话加在一起,想不让临时表空间不撑大都难。
</p>
<p style="padding-top:5px;padding-right:20px;padding-bottom:5px;">
看看这个相同的SQL ID代表的SQL是什么:
</p>
<div class="dp-highlighter" style="margin:18px 0px;padding:1px 0px 0px;font-family:Consolas, 'Courier New', Courier, mono;font-size:12px;width:653.390625px;overflow:auto;background-color:#E7E5DC;">
<div class="bar" style="margin:0px;padding:0px 0px 0px 45px;">
<div class="tools" style="margin:0px;padding:3px 8px 10px 10px;font-stretch:normal;font-size:9px;line-height:normal;font-family:Verdana, Geneva, Arial, Helvetica, sans-serif;color:silver;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;background-color:#F8F8F8;">
<a href="http://www.laoxiong.net/temporary_tablespace_excessive_usage_case.html#" style="margin:0px 10px 0px 0px;padding:0px;color:#A0A0A0;text-decoration:none;outline-color:invert;outline-style:none;font-size:9px;">view plain</a><a href="http://www.laoxiong.net/temporary_tablespace_excessive_usage_case.html#" style="margin:0px 10px 0px 0px;padding:0px;color:#A0A0A0;text-decoration:none;outline-color:invert;outline-style:none;font-size:9px;">copy to clipboard</a><a href="http://www.laoxiong.net/temporary_tablespace_excessive_usage_case.html#" style="margin:0px 10px 0px 0px;padding:0px;color:#A0A0A0;text-decoration:none;outline-color:invert;outline-style:none;font-size:9px;">print</a><a href="http://www.laoxiong.net/temporary_tablespace_excessive_usage_case.html#" style="margin:0px 10px 0px 0px;padding:0px;color:#A0A0A0;text-decoration:none;outline-color:invert;outline-style:none;font-size:9px;">?</a>
</div>
</div>
<ol start="1" class="dp-sql" style="margin:0px 0px 1px 45px;padding:0px;list-style:decimal-leading-zero;color:#5C5C5C;background-color:#FFFFFF;">
<li class="alt" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;">
<span style="margin:0px;padding:0px;color:black;">SQL> @sqlbyid 291nk7db4bwdh </span>
</li>
<li class="" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;background-color:#F8F8F8;">
<span style="margin:0px;padding:0px;color:black;"> </span>
</li>
<li class="alt" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;">
<span style="margin:0px;padding:0px;color:black;">SQL_FULLTEXT </span>
</li>
<li class="" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;background-color:#F8F8F8;">
<span style="margin:0px;padding:0px;color:black;"><span class="comment" style="margin:0px;padding:0px;color:#008200;">--------------------------------------------------------------------------------------------------------------</span><span style="margin:0px;padding:0px;"> </span></span>
</li>
<li class="alt" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;">
<span style="margin:0px;padding:0px;color:black;"> <span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">SELECT</span><span style="margin:0px;padding:0px;"> A.LLEVEL, A.LMODE </span><span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">FROM</span><span style="margin:0px;padding:0px;"> TABLE_XXX A </span><span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">WHERE</span><span style="margin:0px;padding:0px;"> A.SERVICE_NAME = :SERVICE_NAME </span><span class="op" style="margin:0px;padding:0px;color:#808080;">AND</span><span style="margin:0px;padding:0px;"> STATE=</span><span class="string" style="margin:0px;padding:0px;color:blue;">'Y'</span><span style="margin:0px;padding:0px;"> </span></span>
</li>
</ol>
</div>
<p style="padding-top:5px;padding-right:20px;padding-bottom:5px;">
很明显,这是一条非常简单的SQL,没有ORDER BY ,也没有GROUP BY、UNION、DISTINCT等需要排序的,TABLE_XXX是一张普通的表,而不是视图。出现了什么问题?会不会是v$sort_usage的SQL_ID列有错误?我们查看其中一个会话正在执行的SQL:
</p>
<div class="dp-highlighter" style="margin:18px 0px;padding:1px 0px 0px;font-family:Consolas, 'Courier New', Courier, mono;font-size:12px;width:653.390625px;overflow:auto;background-color:#E7E5DC;">
<div class="bar" style="margin:0px;padding:0px 0px 0px 45px;">
<div class="tools" style="margin:0px;padding:3px 8px 10px 10px;font-stretch:normal;font-size:9px;line-height:normal;font-family:Verdana, Geneva, Arial, Helvetica, sans-serif;color:silver;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;background-color:#F8F8F8;">
<a href="http://www.laoxiong.net/temporary_tablespace_excessive_usage_case.html#" style="margin:0px 10px 0px 0px;padding:0px;color:#A0A0A0;text-decoration:none;outline-color:invert;outline-style:none;font-size:9px;">view plain</a><a href="http://www.laoxiong.net/temporary_tablespace_excessive_usage_case.html#" style="margin:0px 10px 0px 0px;padding:0px;color:#A0A0A0;text-decoration:none;outline-color:invert;outline-style:none;font-size:9px;">copy to clipboard</a><a href="http://www.laoxiong.net/temporary_tablespace_excessive_usage_case.html#" style="margin:0px 10px 0px 0px;padding:0px;color:#A0A0A0;text-decoration:none;outline-color:invert;outline-style:none;font-size:9px;">print</a><a href="http://www.laoxiong.net/temporary_tablespace_excessive_usage_case.html#" style="margin:0px 10px 0px 0px;padding:0px;color:#A0A0A0;text-decoration:none;outline-color:invert;outline-style:none;font-size:9px;">?</a>
</div>
</div>
<ol start="1" class="dp-sql" style="margin:0px 0px 1px 45px;padding:0px;list-style:decimal-leading-zero;color:#5C5C5C;background-color:#FFFFFF;">
<li class="alt" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;">
<span style="margin:0px;padding:0px;color:black;"><span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">select</span><span style="margin:0px;padding:0px;"> sid,prev_sql_id, sql_id </span><span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">from</span><span style="margin:0px;padding:0px;"> v$session </span><span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">where</span><span style="margin:0px;padding:0px;"> saddr=</span><span class="string" style="margin:0px;padding:0px;color:blue;">'070000294AC0D050'</span><span style="margin:0px;padding:0px;">; </span></span>
</li>
<li class="" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;background-color:#F8F8F8;">
<span style="margin:0px;padding:0px;color:black;"> </span>
</li>
<li class="alt" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;">
<span style="margin:0px;padding:0px;color:black;"> SID PREV_SQL_ID SQL_ID </span>
</li>
<li class="" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;background-color:#F8F8F8;">
<span style="margin:0px;padding:0px;color:black;"><span class="comment" style="margin:0px;padding:0px;color:#008200;">----------- ------------- -------------</span><span style="margin:0px;padding:0px;"> </span></span>
</li>
<li class="alt" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;">
<span style="margin:0px;padding:0px;color:black;"> 3163 291nk7db4bwdh </span>
</li>
</ol>
</div>
<p style="padding-top:5px;padding-right:20px;padding-bottom:5px;">
v$sort_usage中看到某个会话当前没有执行任何SQL,v$sort_usage中的SQL_ID是该会话前一条执行的SQL。为什么这里显示的是会话前一条执行的SQL,关于这个问题后面再详述,但至少有一点是可以判断的:<strong style="margin:0px;padding:0px;">如果大量的临时段都是由会话当前正在执行的SQL所产生的,那说明同时有几百个会话在执行需要大量临时空间的SQL,那系统早就崩溃了。</strong>所以这些临时表空间的占用不应该是由当前在执行的SQL所产生的,至少大部分不是。
</p>
<p style="padding-top:5px;padding-right:20px;padding-bottom:5px;">
大部分人的一个错误观点是,临时表空间中当前占用的空间是由会话当前正在执行的SQL所产生的。上面的一个简单的分析判断,情况不应该是这样。我们可以基于查询类SQL的执行过程来分析:
</p>
<ol style="margin:10px 0px;padding:0px 40px;">
<li style="margin:0px;padding:2px 0px;">
解析SQL语句(Parse),生成一个游标(Open Cursor)。
</li>
<li style="margin:0px;padding:2px 0px;">
执行SQL语句(Execute),严格说就是执行新产生的游标。
</li>
<li style="margin:0px;padding:2px 0px;">
在游标中取数据(Fetch)。
</li>
<li style="margin:0px;padding:2px 0px;">
关闭游标(Close Cursor)。
</li>
</ol>
<p style="padding-top:5px;padding-right:20px;padding-bottom:5px;">
关键在第3步。大家都知道取数据有一个array size的概念,表示一次从游标中取多少条数据,这是一个循环的过程。如果SQL查询得到的数据有1000条,每次取100条,则需要取10次。对于Fetch Cursor,有两点:
</p>
<ol style="margin:10px 0px;padding:0px 40px;">
<li style="margin:0px;padding:2px 0px;">
一个游标,或者说一条SQL语句,并不要求客户端把所有数据取完,只取了一部分数据就关闭游标也是可以的。
</li>
<li style="margin:0px;padding:2px 0px;">
只要还没有关闭游标,数据库就要维护该游标的状态,如果是排序的SQL,也需要维持该SQL已经排好序的数据。
</li>
</ol>
<p style="padding-top:5px;padding-right:20px;padding-bottom:5px;">
很显然,从上述第2点可以知道,如果一条SQL使用了临时段来排序,<strong style="margin:0px;padding:0px;">在SQL对应的游标没关闭的情况下,Oracle数据库不会去释放临时段</strong>,因为对于Oracle数据库来说,它不会知道客户端是否还要继续取游标的数据。
</p>
<p style="padding-top:5px;padding-right:20px;padding-bottom:5px;">
基于这样的分析,我们只需要随便选择一个占用了接近1GB的会话,查询v$open_cursor,查看其打开的游标中是否有大数据量排序的SQL:
</p>
<div class="dp-highlighter" style="margin:18px 0px;padding:1px 0px 0px;font-family:Consolas, 'Courier New', Courier, mono;font-size:12px;width:653.390625px;overflow:auto;background-color:#E7E5DC;">
<div class="bar" style="margin:0px;padding:0px 0px 0px 45px;">
<div class="tools" style="margin:0px;padding:3px 8px 10px 10px;font-stretch:normal;font-size:9px;line-height:normal;font-family:Verdana, Geneva, Arial, Helvetica, sans-serif;color:silver;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;background-color:#F8F8F8;">
<a href="http://www.laoxiong.net/temporary_tablespace_excessive_usage_case.html#" style="margin:0px 10px 0px 0px;padding:0px;color:#A0A0A0;text-decoration:none;outline-color:invert;outline-style:none;font-size:9px;">view plain</a><a href="http://www.laoxiong.net/temporary_tablespace_excessive_usage_case.html#" style="margin:0px 10px 0px 0px;padding:0px;color:#A0A0A0;text-decoration:none;outline-color:invert;outline-style:none;font-size:9px;">copy to clipboard</a><a href="http://www.laoxiong.net/temporary_tablespace_excessive_usage_case.html#" style="margin:0px 10px 0px 0px;padding:0px;color:#A0A0A0;text-decoration:none;outline-color:invert;outline-style:none;font-size:9px;">print</a><a href="http://www.laoxiong.net/temporary_tablespace_excessive_usage_case.html#" style="margin:0px 10px 0px 0px;padding:0px;color:#A0A0A0;text-decoration:none;outline-color:invert;outline-style:none;font-size:9px;">?</a>
</div>
</div>
<ol start="1" class="dp-sql" style="margin:0px 0px 1px 45px;padding:0px;list-style:decimal-leading-zero;color:#5C5C5C;background-color:#FFFFFF;">
<li class="alt" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;">
<span style="margin:0px;padding:0px;color:black;"><span style="margin:0px;padding:0px;">SQL> </span><span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">select</span><span style="margin:0px;padding:0px;"> sql_id,sorts,rows_processed/executions </span><span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">from</span><span style="margin:0px;padding:0px;"> v$sql </span></span>
</li>
<li class="" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;background-color:#F8F8F8;">
<span style="margin:0px;padding:0px;color:black;"> 2 <span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">where</span><span style="margin:0px;padding:0px;"> parsing_schema_name=</span><span class="string" style="margin:0px;padding:0px;color:blue;">'ACCT'</span><span style="margin:0px;padding:0px;"> </span><span class="op" style="margin:0px;padding:0px;color:#808080;">and</span><span style="margin:0px;padding:0px;"> executions>0 </span><span class="op" style="margin:0px;padding:0px;color:#808080;">and</span><span style="margin:0px;padding:0px;"> sorts>0 </span></span>
</li>
<li class="alt" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;">
<span style="margin:0px;padding:0px;color:black;"> 3 <span class="op" style="margin:0px;padding:0px;color:#808080;">and</span><span style="margin:0px;padding:0px;"> sql_id </span><span class="op" style="margin:0px;padding:0px;color:#808080;">in</span><span style="margin:0px;padding:0px;"> (</span><span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">select</span><span style="margin:0px;padding:0px;"> sql_id </span><span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">from</span><span style="margin:0px;padding:0px;"> v$open_cursor </span><span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">where</span><span style="margin:0px;padding:0px;"> sid=4505) </span></span>
</li>
<li class="" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;background-color:#F8F8F8;">
<span style="margin:0px;padding:0px;color:black;"> 4 <span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">order</span><span style="margin:0px;padding:0px;"> </span><span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">by</span><span style="margin:0px;padding:0px;"> 3; </span></span>
</li>
<li class="alt" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;">
<span style="margin:0px;padding:0px;color:black;"> </span>
</li>
<li class="" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;background-color:#F8F8F8;">
<span style="margin:0px;padding:0px;color:black;"> SQL_ID SORTS ROWS_PROCESSED/EXECUTIONS </span>
</li>
<li class="alt" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;">
<span style="margin:0px;padding:0px;color:black;"><span class="comment" style="margin:0px;padding:0px;color:#008200;">------------- ----------- -------------------------</span><span style="margin:0px;padding:0px;"> </span></span>
</li>
<li class="" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;background-color:#F8F8F8;">
<span style="margin:0px;padding:0px;color:black;">...省略部分输出结果... </span>
</li>
<li class="alt" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;">
<span style="margin:0px;padding:0px;color:black;">86vp997jbz7s6 63283 593 </span>
</li>
<li class="" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;background-color:#F8F8F8;">
<span style="margin:0px;padding:0px;color:black;">cfpdpb526ad43 592 35859.79899 </span>
</li>
<li class="alt" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;">
<span style="margin:0px;padding:0px;color:black;">cfpdpb526ad43 188 55893.61702 </span>
</li>
<li class="" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;background-color:#F8F8F8;">
<span style="margin:0px;padding:0px;color:black;">cfpdpb526ad43 443 71000 </span>
</li>
</ol>
</div>
<p style="padding-top:5px;padding-right:20px;padding-bottom:5px;">
<span id="more-1163" style="margin:0px;padding:0px;"></span>
</p>
<p style="padding-top:5px;padding-right:20px;padding-bottom:5px;">
最后三个游标,实际上都是同一条SQL语句,排序的数据量最大,我们来看看这条SQL是什么:
</p>
<div class="dp-highlighter" style="margin:18px 0px;padding:1px 0px 0px;font-family:Consolas, 'Courier New', Courier, mono;font-size:12px;width:653.390625px;overflow:auto;background-color:#E7E5DC;">
<div class="bar" style="margin:0px;padding:0px 0px 0px 45px;">
<div class="tools" style="margin:0px;padding:3px 8px 10px 10px;font-stretch:normal;font-size:9px;line-height:normal;font-family:Verdana, Geneva, Arial, Helvetica, sans-serif;color:silver;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;background-color:#F8F8F8;">
<a href="http://www.laoxiong.net/temporary_tablespace_excessive_usage_case.html#" style="margin:0px 10px 0px 0px;padding:0px;color:#A0A0A0;text-decoration:none;outline-color:invert;outline-style:none;font-size:9px;">view plain</a><a href="http://www.laoxiong.net/temporary_tablespace_excessive_usage_case.html#" style="margin:0px 10px 0px 0px;padding:0px;color:#A0A0A0;text-decoration:none;outline-color:invert;outline-style:none;font-size:9px;">copy to clipboard</a><a href="http://www.laoxiong.net/temporary_tablespace_excessive_usage_case.html#" style="margin:0px 10px 0px 0px;padding:0px;color:#A0A0A0;text-decoration:none;outline-color:invert;outline-style:none;font-size:9px;">print</a><a href="http://www.laoxiong.net/temporary_tablespace_excessive_usage_case.html#" style="margin:0px 10px 0px 0px;padding:0px;color:#A0A0A0;text-decoration:none;outline-color:invert;outline-style:none;font-size:9px;">?</a>
</div>
</div>
<ol start="1" class="dp-sql" style="margin:0px 0px 1px 45px;padding:0px;list-style:decimal-leading-zero;color:#5C5C5C;background-color:#FFFFFF;">
<li class="alt" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;">
<span style="margin:0px;padding:0px;color:black;">@sqlbyid cfpdpb526ad43 </span>
</li>
<li class="" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;background-color:#F8F8F8;">
<span style="margin:0px;padding:0px;color:black;"> </span>
</li>
<li class="alt" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;">
<span style="margin:0px;padding:0px;color:black;">SQL_FULLTEXT </span>
</li>
<li class="" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;background-color:#F8F8F8;">
<span style="margin:0px;padding:0px;color:black;"><span class="comment" style="margin:0px;padding:0px;color:#008200;">---------------------------------------------------------------------------------------------------</span><span style="margin:0px;padding:0px;"> </span></span>
</li>
<li class="alt" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;">
<span style="margin:0px;padding:0px;color:black;"><span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">select</span><span style="margin:0px;padding:0px;"> ... </span><span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">from</span><span style="margin:0px;padding:0px;"> c, b, a, d, e </span><span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">where</span><span style="margin:0px;padding:0px;"> ... </span><span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">order</span><span style="margin:0px;padding:0px;"> </span><span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">by</span><span style="margin:0px;padding:0px;"> d.billing_cycle_id </span><span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">desc</span><span style="margin:0px;padding:0px;">,e.offer_name,a.acc_name </span></span>
</li>
</ol>
</div>
<p style="padding-top:5px;padding-right:20px;padding-bottom:5px;">
基于为客户保密的原因,SQL做了处理,能知道这条SQL的确是排了序就行,不过在SQL中看不出来的是,这条SQL没有任何实质性的能够过滤大量数据的条件。那么我们count(*)这条SQL语句看看:
</p>
<div class="dp-highlighter" style="margin:18px 0px;padding:1px 0px 0px;font-family:Consolas, 'Courier New', Courier, mono;font-size:12px;width:653.390625px;overflow:auto;background-color:#E7E5DC;">
<div class="bar" style="margin:0px;padding:0px 0px 0px 45px;">
<div class="tools" style="margin:0px;padding:3px 8px 10px 10px;font-stretch:normal;font-size:9px;line-height:normal;font-family:Verdana, Geneva, Arial, Helvetica, sans-serif;color:silver;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;background-color:#F8F8F8;">
<a href="http://www.laoxiong.net/temporary_tablespace_excessive_usage_case.html#" style="margin:0px 10px 0px 0px;padding:0px;color:#A0A0A0;text-decoration:none;outline-color:invert;outline-style:none;font-size:9px;">view plain</a><a href="http://www.laoxiong.net/temporary_tablespace_excessive_usage_case.html#" style="margin:0px 10px 0px 0px;padding:0px;color:#A0A0A0;text-decoration:none;outline-color:invert;outline-style:none;font-size:9px;">copy to clipboard</a><a href="http://www.laoxiong.net/temporary_tablespace_excessive_usage_case.html#" style="margin:0px 10px 0px 0px;padding:0px;color:#A0A0A0;text-decoration:none;outline-color:invert;outline-style:none;font-size:9px;">print</a><a href="http://www.laoxiong.net/temporary_tablespace_excessive_usage_case.html#" style="margin:0px 10px 0px 0px;padding:0px;color:#A0A0A0;text-decoration:none;outline-color:invert;outline-style:none;font-size:9px;">?</a>
</div>
</div>
<ol start="1" class="dp-sql" style="margin:0px 0px 1px 45px;padding:0px;list-style:decimal-leading-zero;color:#5C5C5C;background-color:#FFFFFF;">
<li class="alt" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;">
<span style="margin:0px;padding:0px;color:black;"><span class="func" style="margin:0px;padding:0px;">COUNT</span><span style="margin:0px;padding:0px;">(*) </span></span>
</li>
<li class="" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;background-color:#F8F8F8;">
<span style="margin:0px;padding:0px;color:black;"><span class="comment" style="margin:0px;padding:0px;color:#008200;">--------</span><span style="margin:0px;padding:0px;"> </span></span>
</li>
<li class="alt" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;">
<span style="margin:0px;padding:0px;color:black;">12122698 </span>
</li>
</ol>
</div>
<p style="padding-top:5px;padding-right:20px;padding-bottom:5px;">
出来的结果居然有1200多万条数据,一个前台应用,不知道取1200多万条数据干嘛。但是从rows_processed/executions只有几万的结果来看,应用在取了几万条数据之后,由于某些原因(最大的可能就是不能再处理更多的数据),不再继续取数据,但是游标也一直没有关闭。
</p>
<p style="padding-top:5px;padding-right:20px;padding-bottom:5px;">
比较容易就能进行演示sort by时临时表空间的占用。
</p>
<div class="dp-highlighter" style="margin:18px 0px;padding:1px 0px 0px;font-family:Consolas, 'Courier New', Courier, mono;font-size:12px;width:653.390625px;overflow:auto;background-color:#E7E5DC;">
<div class="bar" style="margin:0px;padding:0px 0px 0px 45px;">
<div class="tools" style="margin:0px;padding:3px 8px 10px 10px;font-stretch:normal;font-size:9px;line-height:normal;font-family:Verdana, Geneva, Arial, Helvetica, sans-serif;color:silver;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;background-color:#F8F8F8;">
<a href="http://www.laoxiong.net/temporary_tablespace_excessive_usage_case.html#" style="margin:0px 10px 0px 0px;padding:0px;color:#A0A0A0;text-decoration:none;outline-color:invert;outline-style:none;font-size:9px;">view plain</a><a href="http://www.laoxiong.net/temporary_tablespace_excessive_usage_case.html#" style="margin:0px 10px 0px 0px;padding:0px;color:#A0A0A0;text-decoration:none;outline-color:invert;outline-style:none;font-size:9px;">copy to clipboard</a><a href="http://www.laoxiong.net/temporary_tablespace_excessive_usage_case.html#" style="margin:0px 10px 0px 0px;padding:0px;color:#A0A0A0;text-decoration:none;outline-color:invert;outline-style:none;font-size:9px;">print</a><a href="http://www.laoxiong.net/temporary_tablespace_excessive_usage_case.html#" style="margin:0px 10px 0px 0px;padding:0px;color:#A0A0A0;text-decoration:none;outline-color:invert;outline-style:none;font-size:9px;">?</a>
</div>
</div>
<ol start="1" class="dp-sql" style="margin:0px 0px 1px 45px;padding:0px;list-style:decimal-leading-zero;color:#5C5C5C;background-color:#FFFFFF;">
<li class="alt" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;">
<span style="margin:0px;padding:0px;color:black;">根据dba_objects建一个测试表T1,使其数据量达到2000万行。 </span>
</li>
<li class="" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;background-color:#F8F8F8;">
<span style="margin:0px;padding:0px;color:black;"> <span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">select</span><span style="margin:0px;padding:0px;"> </span><span class="func" style="margin:0px;padding:0px;">count</span><span style="margin:0px;padding:0px;">(*) </span><span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">from</span><span style="margin:0px;padding:0px;"> t1; </span></span>
</li>
<li class="alt" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;">
<span style="margin:0px;padding:0px;color:black;"> </span>
</li>
<li class="" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;background-color:#F8F8F8;">
<span style="margin:0px;padding:0px;color:black;"> <span class="func" style="margin:0px;padding:0px;">COUNT</span><span style="margin:0px;padding:0px;">(*) </span></span>
</li>
<li class="alt" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;">
<span style="margin:0px;padding:0px;color:black;"><span class="comment" style="margin:0px;padding:0px;color:#008200;">-----------</span><span style="margin:0px;padding:0px;"> </span></span>
</li>
<li class="" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;background-color:#F8F8F8;">
<span style="margin:0px;padding:0px;color:black;"> 20171200 </span>
</li>
<li class="alt" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;">
<span style="margin:0px;padding:0px;color:black;"> </span>
</li>
<li class="" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;background-color:#F8F8F8;">
<span style="margin:0px;padding:0px;color:black;">然后将SQL工作区设置为手动模式,设置sort内存大小限制为200M: </span>
</li>
<li class="alt" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;">
<span style="margin:0px;padding:0px;color:black;"> <span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">alter</span><span style="margin:0px;padding:0px;"> session </span><span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">set</span><span style="margin:0px;padding:0px;"> workarea_size_policy=manual; </span></span>
</li>
<li class="" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;background-color:#F8F8F8;">
<span style="margin:0px;padding:0px;color:black;"> <span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">alter</span><span style="margin:0px;padding:0px;"> session </span><span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">set</span><span style="margin:0px;padding:0px;"> sort_area_size=209715200; </span></span>
</li>
<li class="alt" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;">
<span style="margin:0px;padding:0px;color:black;"> </span>
</li>
<li class="" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;background-color:#F8F8F8;">
<span style="margin:0px;padding:0px;color:black;">查询得到当前的会话sid: </span>
</li>
<li class="alt" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;">
<span style="margin:0px;padding:0px;color:black;"> <span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">select</span><span style="margin:0px;padding:0px;"> sid </span><span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">from</span><span style="margin:0px;padding:0px;"> v$mystat </span><span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">where</span><span style="margin:0px;padding:0px;"> rownum< =1; </span></span>
</li>
<li class="" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;background-color:#F8F8F8;">
<span style="margin:0px;padding:0px;color:black;"> </span>
</li>
<li class="alt" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;">
<span style="margin:0px;padding:0px;color:black;"> SID </span>
</li>
<li class="" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;background-color:#F8F8F8;">
<span style="margin:0px;padding:0px;color:black;"><span class="comment" style="margin:0px;padding:0px;color:#008200;">-----------</span><span style="margin:0px;padding:0px;"> </span></span>
</li>
<li class="alt" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;">
<span style="margin:0px;padding:0px;color:black;"> 2111 </span>
</li>
<li class="" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;background-color:#F8F8F8;">
<span style="margin:0px;padding:0px;color:black;"> </span>
</li>
<li class="alt" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;">
<span style="margin:0px;padding:0px;color:black;">执行这下面的代码: </span>
</li>
<li class="" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;background-color:#F8F8F8;">
<span style="margin:0px;padding:0px;color:black;"> <span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">declare</span><span style="margin:0px;padding:0px;"> </span></span>
</li>
<li class="alt" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;">
<span style="margin:0px;padding:0px;color:black;"> 2 v_object_name varchar2(100); </span>
</li>
<li class="" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;background-color:#F8F8F8;">
<span style="margin:0px;padding:0px;color:black;"> 3 v_dummy varchar2(100); </span>
</li>
<li class="alt" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;">
<span style="margin:0px;padding:0px;color:black;"> 4 <span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">begin</span><span style="margin:0px;padding:0px;"> </span></span>
</li>
<li class="" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;background-color:#F8F8F8;">
<span style="margin:0px;padding:0px;color:black;"> 5 <span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">for</span><span style="margin:0px;padding:0px;"> rec </span><span class="op" style="margin:0px;padding:0px;color:#808080;">in</span><span style="margin:0px;padding:0px;"> (</span><span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">select</span><span style="margin:0px;padding:0px;"> * </span><span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">from</span><span style="margin:0px;padding:0px;"> t1 </span><span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">order</span><span style="margin:0px;padding:0px;"> </span><span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">by</span><span style="margin:0px;padding:0px;"> object_id,object_name) loop </span></span>
</li>
<li class="alt" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;">
<span style="margin:0px;padding:0px;color:black;"> 6 <span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">select</span><span style="margin:0px;padding:0px;"> object_type </span><span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">into</span><span style="margin:0px;padding:0px;"> v_dummy </span><span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">from</span><span style="margin:0px;padding:0px;"> t1 </span><span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">where</span><span style="margin:0px;padding:0px;"> rownum<=1; </span></span>
</li>
<li class="" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;background-color:#F8F8F8;">
<span style="margin:0px;padding:0px;color:black;"> 7 <span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">select</span><span style="margin:0px;padding:0px;"> object_name </span><span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">into</span><span style="margin:0px;padding:0px;"> v_object_name </span><span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">from</span><span style="margin:0px;padding:0px;"> dba_objects </span><span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">where</span><span style="margin:0px;padding:0px;"> object_id=rec.object_id; </span></span>
</li>
<li class="alt" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;">
<span style="margin:0px;padding:0px;color:black;"> 8 dbms_lock.sleep(60*10); </span>
</li>
<li class="" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;background-color:#F8F8F8;">
<span style="margin:0px;padding:0px;color:black;"> 9 exit; </span>
</li>
<li class="alt" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;">
<span style="margin:0px;padding:0px;color:black;"> 10 <span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">end</span><span style="margin:0px;padding:0px;"> loop; </span></span>
</li>
<li class="" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;background-color:#F8F8F8;">
<span style="margin:0px;padding:0px;color:black;"> 11 <span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">end</span><span style="margin:0px;padding:0px;">; </span></span>
</li>
<li class="alt" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;">
<span style="margin:0px;padding:0px;color:black;"> 12 / </span>
</li>
<li class="" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;background-color:#F8F8F8;">
<span style="margin:0px;padding:0px;color:black;">这段代码会打开一个游标,对2000万的数据量进行排序,然后在循环中只取一条数据,然后就进入sleep。在另一个窗口中监控到2111这个会话的event变成了PL/SQL lock timer,就去查询v$sort_usage: </span>
</li>
<li class="alt" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;">
<span style="margin:0px;padding:0px;color:black;"><span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">select</span><span style="margin:0px;padding:0px;"> a.sql_id sort_sql_id,b.sql_id,b.prev_sql_id, contents,segtype,blocks*8/1024/1024 gb </span></span>
</li>
<li class="" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;background-color:#F8F8F8;">
<span style="margin:0px;padding:0px;color:black;"> 2 <span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">from</span><span style="margin:0px;padding:0px;"> v$sort_usage a,v$session b </span></span>
</li>
<li class="alt" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;">
<span style="margin:0px;padding:0px;color:black;"> 3 <span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">where</span><span style="margin:0px;padding:0px;"> a.session_addr=b.saddr </span></span>
</li>
<li class="" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;background-color:#F8F8F8;">
<span style="margin:0px;padding:0px;color:black;"> 4 <span class="op" style="margin:0px;padding:0px;color:#808080;">and</span><span style="margin:0px;padding:0px;"> b.sid=2111; </span></span>
</li>
<li class="alt" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;">
<span style="margin:0px;padding:0px;color:black;"> </span>
</li>
<li class="" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;background-color:#F8F8F8;">
<span style="margin:0px;padding:0px;color:black;">SORT_SQL_ID SQL_ID PREV_SQL_ID CONTENTS SEGTYPE GB </span>
</li>
<li class="alt" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;">
<span style="margin:0px;padding:0px;color:black;"><span class="comment" style="margin:0px;padding:0px;color:#008200;">------------- ------------- ------------- --------- --------- -----------</span><span style="margin:0px;padding:0px;"> </span></span>
</li>
<li class="" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;background-color:#F8F8F8;">
<span style="margin:0px;padding:0px;color:black;">fabh24prgk2sj bhzf316mdc07w fabh24prgk2sj <span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">TEMPORARY</span><span style="margin:0px;padding:0px;"> SORT 1.444824219 </span></span>
</li>
<li class="alt" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;">
<span style="margin:0px;padding:0px;color:black;">可以看到v$sort_usage中的SQL_ID(即上述结果中SORT_SQL_ID)与v$session中的pre_sql_id一致,这条SQL是: </span>
</li>
<li class="" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;background-color:#F8F8F8;">
<span style="margin:0px;padding:0px;color:black;"> </span>
</li>
<li class="alt" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;">
<span style="margin:0px;padding:0px;color:black;">@sqlbyid fabh24prgk2sj </span>
</li>
<li class="" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;background-color:#F8F8F8;">
<span style="margin:0px;padding:0px;color:black;">SQL_FULLTEXT </span>
</li>
<li class="alt" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;">
<span style="margin:0px;padding:0px;color:black;"><span class="comment" style="margin:0px;padding:0px;color:#008200;">--------------------------------------------------------</span><span style="margin:0px;padding:0px;"> </span></span>
</li>
<li class="" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;background-color:#F8F8F8;">
<span style="margin:0px;padding:0px;color:black;"><span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">SELECT</span><span style="margin:0px;padding:0px;"> OBJECT_NAME </span><span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">FROM</span><span style="margin:0px;padding:0px;"> DBA_OBJECTS </span><span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">WHERE</span><span style="margin:0px;padding:0px;"> OBJECT_ID=:B1 </span></span>
</li>
<li class="alt" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;">
<span style="margin:0px;padding:0px;color:black;"> </span>
</li>
<li class="" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;background-color:#F8F8F8;">
<span style="margin:0px;padding:0px;color:black;">而实际上当前正在执行的SQL是: </span>
</li>
<li class="alt" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;">
<span style="margin:0px;padding:0px;color:black;"> @sqlbyid bhzf316mdc07w </span>
</li>
<li class="" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;background-color:#F8F8F8;">
<span style="margin:0px;padding:0px;color:black;"> </span>
</li>
<li class="alt" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;">
<span style="margin:0px;padding:0px;color:black;">SQL_FULLTEXT </span>
</li>
<li class="" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;background-color:#F8F8F8;">
<span style="margin:0px;padding:0px;color:black;"><span class="comment" style="margin:0px;padding:0px;color:#008200;">---------------------------------------------------------------------------</span><span style="margin:0px;padding:0px;"> </span></span>
</li>
<li class="alt" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;">
<span style="margin:0px;padding:0px;color:black;"><span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">declare</span><span style="margin:0px;padding:0px;"> </span></span>
</li>
<li class="" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;background-color:#F8F8F8;">
<span style="margin:0px;padding:0px;color:black;"> v_object_name varchar2(100); </span>
</li>
<li class="alt" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;">
<span style="margin:0px;padding:0px;color:black;"> v_dummy varchar2(100); </span>
</li>
<li class="" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;background-color:#F8F8F8;">
<span style="margin:0px;padding:0px;color:black;"><span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">begin</span><span style="margin:0px;padding:0px;"> </span></span>
</li>
<li class="alt" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;">
<span style="margin:0px;padding:0px;color:black;"> <span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">for</span><span style="margin:0px;padding:0px;"> rec </span><span class="op" style="margin:0px;padding:0px;color:#808080;">in</span><span style="margin:0px;padding:0px;"> (</span><span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">select</span><span style="margin:0px;padding:0px;"> * </span><span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">from</span><span style="margin:0px;padding:0px;"> t1 </span><span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">order</span><span style="margin:0px;padding:0px;"> </span><span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">by</span><span style="margin:0px;padding:0px;"> object_id,object_name) loop </span></span>
</li>
<li class="" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;background-color:#F8F8F8;">
<span style="margin:0px;padding:0px;color:black;"> <span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">select</span><span style="margin:0px;padding:0px;"> object_type </span><span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">into</span><span style="margin:0px;padding:0px;"> v_dummy </span><span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">from</span><span style="margin:0px;padding:0px;"> t1 </span><span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">where</span><span style="margin:0px;padding:0px;"> rownum<=1; </span></span>
</li>
<li class="alt" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;">
<span style="margin:0px;padding:0px;color:black;"> <span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">select</span><span style="margin:0px;padding:0px;"> object_name </span><span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">into</span><span style="margin:0px;padding:0px;"> v_object_name </span><span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">from</span><span style="margin:0px;padding:0px;"> dba_objects </span><span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">where</span><span style="margin:0px;padding:0px;"> object_id=rec.object_id; </span></span>
</li>
<li class="" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;background-color:#F8F8F8;">
<span style="margin:0px;padding:0px;color:black;"> dbms_lock.sleep(60*10); </span>
</li>
<li class="alt" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;">
<span style="margin:0px;padding:0px;color:black;"> exit; </span>
</li>
<li class="" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;background-color:#F8F8F8;">
<span style="margin:0px;padding:0px;color:black;"> <span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">end</span><span style="margin:0px;padding:0px;"> loop; </span></span>
</li>
<li class="alt" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;">
<span style="margin:0px;padding:0px;color:black;"><span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">end</span><span style="margin:0px;padding:0px;">; </span></span>
</li>
</ol>
</div>
<p style="padding-top:5px;padding-right:20px;padding-bottom:5px;">
问题分析到这里,很明显确认的是,应用存在问题,也许是业务逻辑问题;也许是根据前台选择的条件拼接的SQL,但是没有任何条件时就查询了所有数据。接下来就是找来开发人员,至于后面的事就跟这个主题没有太大关系。我们可以根据这个案例来进一步展开,去探寻临时表空间的更多知识点。
</p>
<p style="padding-top:5px;padding-right:20px;padding-bottom:5px;">
这里要展开的第1点是,v$sort_usage中的sql_id是不是会话正在执行的SQL,我们去看看视图fixed_View_definition就知道了:
</p>
<div class="dp-highlighter" style="margin:18px 0px;padding:1px 0px 0px;font-family:Consolas, 'Courier New', Courier, mono;font-size:12px;width:653.390625px;overflow:auto;background-color:#E7E5DC;">
<div class="bar" style="margin:0px;padding:0px 0px 0px 45px;">
<div class="tools" style="margin:0px;padding:3px 8px 10px 10px;font-stretch:normal;font-size:9px;line-height:normal;font-family:Verdana, Geneva, Arial, Helvetica, sans-serif;color:silver;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;background-color:#F8F8F8;">
<a href="http://www.laoxiong.net/temporary_tablespace_excessive_usage_case.html#" style="margin:0px 10px 0px 0px;padding:0px;color:#A0A0A0;text-decoration:none;outline-color:invert;outline-style:none;font-size:9px;">view plain</a><a href="http://www.laoxiong.net/temporary_tablespace_excessive_usage_case.html#" style="margin:0px 10px 0px 0px;padding:0px;color:#A0A0A0;text-decoration:none;outline-color:invert;outline-style:none;font-size:9px;">copy to clipboard</a><a href="http://www.laoxiong.net/temporary_tablespace_excessive_usage_case.html#" style="margin:0px 10px 0px 0px;padding:0px;color:#A0A0A0;text-decoration:none;outline-color:invert;outline-style:none;font-size:9px;">print</a><a href="http://www.laoxiong.net/temporary_tablespace_excessive_usage_case.html#" style="margin:0px 10px 0px 0px;padding:0px;color:#A0A0A0;text-decoration:none;outline-color:invert;outline-style:none;font-size:9px;">?</a>
</div>
</div>
<ol start="1" class="dp-sql" style="margin:0px 0px 1px 45px;padding:0px;list-style:decimal-leading-zero;color:#5C5C5C;background-color:#FFFFFF;">
<li class="alt" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;">
<span style="margin:0px;padding:0px;color:black;"><span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">select</span><span style="margin:0px;padding:0px;"> x$ktsso.inst_id, username, username, ktssoses, ktssosno, prev_sql_addr, prev_hash_value, </span></span>
</li>
<li class="" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;background-color:#F8F8F8;">
<span style="margin:0px;padding:0px;color:black;">prev_sql_id, ktssotsn, decode(ktssocnt, 0, <span class="string" style="margin:0px;padding:0px;color:blue;">'PERMANENT'</span><span style="margin:0px;padding:0px;">, 1, </span><span class="string" style="margin:0px;padding:0px;color:blue;">'TEMPORARY'</span><span style="margin:0px;padding:0px;">), decode(ktssosegt, 1, </span></span>
</li>
<li class="alt" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;">
<span style="margin:0px;padding:0px;color:black;"><span class="string" style="margin:0px;padding:0px;color:blue;">'SORT'</span><span style="margin:0px;padding:0px;">, 2, </span><span class="string" style="margin:0px;padding:0px;color:blue;">'HASH'</span><span style="margin:0px;padding:0px;">, 3, </span><span class="string" style="margin:0px;padding:0px;color:blue;">'DATA'</span><span style="margin:0px;padding:0px;">, 4, </span><span class="string" style="margin:0px;padding:0px;color:blue;">'INDEX'</span><span style="margin:0px;padding:0px;">, 5, </span><span class="string" style="margin:0px;padding:0px;color:blue;">'LOB_DATA'</span><span style="margin:0px;padding:0px;">, 6, </span><span class="string" style="margin:0px;padding:0px;color:blue;">'LOB_INDEX'</span><span style="margin:0px;padding:0px;"> , </span><span class="string" style="margin:0px;padding:0px;color:blue;">'UNDEFINED'</span><span style="margin:0px;padding:0px;">), ktssofno, </span></span>
</li>
<li class="" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;background-color:#F8F8F8;">
<span style="margin:0px;padding:0px;color:black;">ktssobno, ktssoexts, ktssoblks, ktssorfno <span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">from</span><span style="margin:0px;padding:0px;"> x$ktsso, v$session </span><span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">where</span><span style="margin:0px;padding:0px;"> ktssoses = v$session.saddr </span></span>
</li>
<li class="alt" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;">
<span style="margin:0px;padding:0px;color:black;"><span class="op" style="margin:0px;padding:0px;color:#808080;">and</span><span style="margin:0px;padding:0px;"> ktssosno = v$session.serial# </span></span>
</li>
</ol>
</div>
<p style="padding-top:5px;padding-right:20px;padding-bottom:5px;">
原来在v$sort_usage的定义中,就明确地说明了SQL_ID列是v$session中的prev_sql_id列,而不是当前的SQL。至于为什么这样定义,老实说,现在还不知道。
</p>
<p style="padding-top:5px;padding-right:20px;padding-bottom:5px;">
不过从11.2.0.2这个版本开始,v$sort_usage的基表x$ktsso中增加了一个字段ktssosqlid,表示该临时段真正关联的SQL,以上述的测试结果为例,查询这个基表的结果如下:
</p>
<div class="dp-highlighter" style="margin:18px 0px;padding:1px 0px 0px;font-family:Consolas, 'Courier New', Courier, mono;font-size:12px;width:653.390625px;overflow:auto;background-color:#E7E5DC;">
<div class="bar" style="margin:0px;padding:0px 0px 0px 45px;">
<div class="tools" style="margin:0px;padding:3px 8px 10px 10px;font-stretch:normal;font-size:9px;line-height:normal;font-family:Verdana, Geneva, Arial, Helvetica, sans-serif;color:silver;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;background-color:#F8F8F8;">
<a href="http://www.laoxiong.net/temporary_tablespace_excessive_usage_case.html#" style="margin:0px 10px 0px 0px;padding:0px;color:#A0A0A0;text-decoration:none;outline-color:invert;outline-style:none;font-size:9px;">view plain</a><a href="http://www.laoxiong.net/temporary_tablespace_excessive_usage_case.html#" style="margin:0px 10px 0px 0px;padding:0px;color:#A0A0A0;text-decoration:none;outline-color:invert;outline-style:none;font-size:9px;">copy to clipboard</a><a href="http://www.laoxiong.net/temporary_tablespace_excessive_usage_case.html#" style="margin:0px 10px 0px 0px;padding:0px;color:#A0A0A0;text-decoration:none;outline-color:invert;outline-style:none;font-size:9px;">print</a><a href="http://www.laoxiong.net/temporary_tablespace_excessive_usage_case.html#" style="margin:0px 10px 0px 0px;padding:0px;color:#A0A0A0;text-decoration:none;outline-color:invert;outline-style:none;font-size:9px;">?</a>
</div>
</div>
<ol start="1" class="dp-sql" style="margin:0px 0px 1px 45px;padding:0px;list-style:decimal-leading-zero;color:#5C5C5C;background-color:#FFFFFF;">
<li class="alt" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;">
<span style="margin:0px;padding:0px;color:black;"><span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">select</span><span style="margin:0px;padding:0px;"> ktssosqlid </span><span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">from</span><span style="margin:0px;padding:0px;"> x$ktsso, v$session </span><span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">where</span><span style="margin:0px;padding:0px;"> ktssoses = v$session.saddr </span></span>
</li>
<li class="" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;background-color:#F8F8F8;">
<span style="margin:0px;padding:0px;color:black;"> 2 <span class="op" style="margin:0px;padding:0px;color:#808080;">and</span><span style="margin:0px;padding:0px;"> ktssosno = v$session.serial# </span></span>
</li>
<li class="alt" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;">
<span style="margin:0px;padding:0px;color:black;"> 3 <span class="op" style="margin:0px;padding:0px;color:#808080;">and</span><span style="margin:0px;padding:0px;"> v$session.sid=2111; </span></span>
</li>
<li class="" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;background-color:#F8F8F8;">
<span style="margin:0px;padding:0px;color:black;"> </span>
</li>
<li class="alt" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;">
<span style="margin:0px;padding:0px;color:black;">KTSSOSQLID </span>
</li>
<li class="" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;background-color:#F8F8F8;">
<span style="margin:0px;padding:0px;color:black;"><span class="comment" style="margin:0px;padding:0px;color:#008200;">-------------</span><span style="margin:0px;padding:0px;"> </span></span>
</li>
<li class="alt" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;">
<span style="margin:0px;padding:0px;color:black;">60t6fmjsw6v8y </span>
</li>
<li class="" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;background-color:#F8F8F8;">
<span style="margin:0px;padding:0px;color:black;"> </span>
</li>
<li class="alt" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;">
<span style="margin:0px;padding:0px;color:black;">@sqlbyid 60t6fmjsw6v8y </span>
</li>
<li class="" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;background-color:#F8F8F8;">
<span style="margin:0px;padding:0px;color:black;"> </span>
</li>
<li class="alt" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;">
<span style="margin:0px;padding:0px;color:black;">SQL_FULLTEXT </span>
</li>
<li class="" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;background-color:#F8F8F8;">
<span style="margin:0px;padding:0px;color:black;"><span class="comment" style="margin:0px;padding:0px;color:#008200;">---------------------------------------------------------------------------</span><span style="margin:0px;padding:0px;"> </span></span>
</li>
<li class="alt" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;">
<span style="margin:0px;padding:0px;color:black;"><span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">SELECT</span><span style="margin:0px;padding:0px;"> * </span><span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">FROM</span><span style="margin:0px;padding:0px;"> T1 </span><span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">ORDER</span><span style="margin:0px;padding:0px;"> </span><span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">BY</span><span style="margin:0px;padding:0px;"> OBJECT_ID,OBJECT_NAME </span></span>
</li>
</ol>
</div>
<p style="padding-top:5px;padding-right:20px;padding-bottom:5px;">
可以看到的是我们查询到了真正产生临时段的SQL。
</p>
<p style="padding-top:5px;padding-right:20px;padding-bottom:5px;">
一直以来,v$sort_usage中的SQL_ID误导了很多人。所幸的是Oracle从11.2.0.2开始进行了弥补,MOS中有文档:
</p>
<blockquote style="margin:10px 30px 10px 20px;padding:5px 10px;border-width:1px 1px 1px 2px;border-style:solid;border-color:#DDDDDD #DDDDDD #DDDDDD #91AA9D;background-color:#EEEEEE;">
<p style="padding-top:5px;padding-right:20px;padding-bottom:5px;">
Bug 17834663 - Include SQL ID for statement that created a temporary segment in GV$SORT_USAGE (文档 ID 17834663.8)<br style="margin:0px;padding:0px;" />
In previous versions, it was not possible to identify the SQL ID<br style="margin:0px;padding:0px;" />
of the statement that created a given temporary segment in<br style="margin:0px;padding:0px;" />
eg. (G)V$SORT_USAGE.
</p>
<p style="padding-top:5px;padding-right:20px;padding-bottom:5px;">
@ Via the fix for bug:8806817 we added the SQL ID to the X$KTSSO<br style="margin:0px;padding:0px;" />
@ table (ktssosqlid), but it was not exposed in the GV$SORT_USAGE<br style="margin:0px;padding:0px;" />
@ view until now.
</p>
<p style="padding-top:5px;padding-right:20px;padding-bottom:5px;">
The SQL ID of the statement is in column SQL_ID_TEMPSEG
</p>
<p style="padding-top:5px;padding-right:20px;padding-bottom:5px;">
Note that this fix cannot be provided as an interim patch.
</p>
</blockquote>
<p style="padding-top:5px;padding-right:20px;padding-bottom:5px;">
我们改良一下v$sort_usage,使用如下的查询来代替:
</p>
<div class="dp-highlighter" style="margin:18px 0px;padding:1px 0px 0px;font-family:Consolas, 'Courier New', Courier, mono;font-size:12px;width:653.390625px;overflow:auto;background-color:#E7E5DC;">
<div class="bar" style="margin:0px;padding:0px 0px 0px 45px;">
<div class="tools" style="margin:0px;padding:3px 8px 10px 10px;font-stretch:normal;font-size:9px;line-height:normal;font-family:Verdana, Geneva, Arial, Helvetica, sans-serif;color:silver;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;background-color:#F8F8F8;">
<a href="http://www.laoxiong.net/temporary_tablespace_excessive_usage_case.html#" style="margin:0px 10px 0px 0px;padding:0px;color:#A0A0A0;text-decoration:none;outline-color:invert;outline-style:none;font-size:9px;">view plain</a><a href="http://www.laoxiong.net/temporary_tablespace_excessive_usage_case.html#" style="margin:0px 10px 0px 0px;padding:0px;color:#A0A0A0;text-decoration:none;outline-color:invert;outline-style:none;font-size:9px;">copy to clipboard</a><a href="http://www.laoxiong.net/temporary_tablespace_excessive_usage_case.html#" style="margin:0px 10px 0px 0px;padding:0px;color:#A0A0A0;text-decoration:none;outline-color:invert;outline-style:none;font-size:9px;">print</a><a href="http://www.laoxiong.net/temporary_tablespace_excessive_usage_case.html#" style="margin:0px 10px 0px 0px;padding:0px;color:#A0A0A0;text-decoration:none;outline-color:invert;outline-style:none;font-size:9px;">?</a>
</div>
</div>
<ol start="1" class="dp-sql" style="margin:0px 0px 1px 45px;padding:0px;list-style:decimal-leading-zero;color:#5C5C5C;background-color:#FFFFFF;">
<li class="alt" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;">
<span style="margin:0px;padding:0px;color:black;"><span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">select</span><span style="margin:0px;padding:0px;"> k.inst_id </span><span class="string" style="margin:0px;padding:0px;color:blue;">"INST_ID"</span><span style="margin:0px;padding:0px;">, </span></span>
</li>
<li class="" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;background-color:#F8F8F8;">
<span style="margin:0px;padding:0px;color:black;"> ktssoses <span class="string" style="margin:0px;padding:0px;color:blue;">"SADDR"</span><span style="margin:0px;padding:0px;">, </span></span>
</li>
<li class="alt" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;">
<span style="margin:0px;padding:0px;color:black;"> sid, </span>
</li>
<li class="" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;background-color:#F8F8F8;">
<span style="margin:0px;padding:0px;color:black;"> ktssosno <span class="string" style="margin:0px;padding:0px;color:blue;">"SERIAL#"</span><span style="margin:0px;padding:0px;">, </span></span>
</li>
<li class="alt" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;">
<span style="margin:0px;padding:0px;color:black;"> username <span class="string" style="margin:0px;padding:0px;color:blue;">"USERNAME"</span><span style="margin:0px;padding:0px;">, </span></span>
</li>
<li class="" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;background-color:#F8F8F8;">
<span style="margin:0px;padding:0px;color:black;"> osuser <span class="string" style="margin:0px;padding:0px;color:blue;">"OSUSER"</span><span style="margin:0px;padding:0px;">, </span></span>
</li>
<li class="alt" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;">
<span style="margin:0px;padding:0px;color:black;"> ktssosqlid <span class="string" style="margin:0px;padding:0px;color:blue;">"SQL_ID"</span><span style="margin:0px;padding:0px;">, </span></span>
</li>
<li class="" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;background-color:#F8F8F8;">
<span style="margin:0px;padding:0px;color:black;"> ktssotsn <span class="string" style="margin:0px;padding:0px;color:blue;">"TABLESPACE"</span><span style="margin:0px;padding:0px;">, </span></span>
</li>
<li class="alt" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;">
<span style="margin:0px;padding:0px;color:black;"> decode(ktssocnt, 0, <span class="string" style="margin:0px;padding:0px;color:blue;">'PERMANENT'</span><span style="margin:0px;padding:0px;">, 1, </span><span class="string" style="margin:0px;padding:0px;color:blue;">'TEMPORARY'</span><span style="margin:0px;padding:0px;">) </span><span class="string" style="margin:0px;padding:0px;color:blue;">"CONTENTS"</span><span style="margin:0px;padding:0px;">, </span></span>
</li>
<li class="" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;background-color:#F8F8F8;">
<span style="margin:0px;padding:0px;color:black;"> <span class="comment" style="margin:0px;padding:0px;color:#008200;">--注意在12c的v$sort_usage定义中TABLESPACE和CONTENTS已经发生变化了。</span><span style="margin:0px;padding:0px;"> </span></span>
</li>
<li class="alt" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;">
<span style="margin:0px;padding:0px;color:black;"> decode(ktssosegt, 1, <span class="string" style="margin:0px;padding:0px;color:blue;">'SORT'</span><span style="margin:0px;padding:0px;">, 2, </span><span class="string" style="margin:0px;padding:0px;color:blue;">'HASH'</span><span style="margin:0px;padding:0px;">, 3, </span><span class="string" style="margin:0px;padding:0px;color:blue;">'DATA'</span><span style="margin:0px;padding:0px;">, 4, </span><span class="string" style="margin:0px;padding:0px;color:blue;">'INDEX'</span><span style="margin:0px;padding:0px;">, </span></span>
</li>
<li class="" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;background-color:#F8F8F8;">
<span style="margin:0px;padding:0px;color:black;"> 5, <span class="string" style="margin:0px;padding:0px;color:blue;">'LOB_DATA'</span><span style="margin:0px;padding:0px;">, 6, </span><span class="string" style="margin:0px;padding:0px;color:blue;">'LOB_INDEX'</span><span style="margin:0px;padding:0px;"> , </span><span class="string" style="margin:0px;padding:0px;color:blue;">'UNDEFINED'</span><span style="margin:0px;padding:0px;">) </span><span class="string" style="margin:0px;padding:0px;color:blue;">"SEGTYPE"</span><span style="margin:0px;padding:0px;">, </span></span>
</li>
<li class="alt" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;">
<span style="margin:0px;padding:0px;color:black;"> ktssofno <span class="string" style="margin:0px;padding:0px;color:blue;">"SEGFILE#"</span><span style="margin:0px;padding:0px;">, </span></span>
</li>
<li class="" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;background-color:#F8F8F8;">
<span style="margin:0px;padding:0px;color:black;"> ktssobno <span class="string" style="margin:0px;padding:0px;color:blue;">"SEGBLK#"</span><span style="margin:0px;padding:0px;">, </span></span>
</li>
<li class="alt" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;">
<span style="margin:0px;padding:0px;color:black;"> ktssoexts <span class="string" style="margin:0px;padding:0px;color:blue;">"EXTENTS"</span><span style="margin:0px;padding:0px;">, </span></span>
</li>
<li class="" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;background-color:#F8F8F8;">
<span style="margin:0px;padding:0px;color:black;"> ktssoblks <span class="string" style="margin:0px;padding:0px;color:blue;">"BLOCKS"</span><span style="margin:0px;padding:0px;">, </span></span>
</li>
<li class="alt" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;">
<span style="margin:0px;padding:0px;color:black;"> round(ktssoblks*p.value/1024/1024, 2) <span class="string" style="margin:0px;padding:0px;color:blue;">"SIZE_MB"</span><span style="margin:0px;padding:0px;">, </span></span>
</li>
<li class="" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;background-color:#F8F8F8;">
<span style="margin:0px;padding:0px;color:black;"> ktssorfno <span class="string" style="margin:0px;padding:0px;color:blue;">"SEGRFNO#"</span><span style="margin:0px;padding:0px;"> </span></span>
</li>
<li class="alt" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;">
<span style="margin:0px;padding:0px;color:black;"><span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">from</span><span style="margin:0px;padding:0px;"> x$ktsso k, v$session s, </span></span>
</li>
<li class="" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;background-color:#F8F8F8;">
<span style="margin:0px;padding:0px;color:black;"> (<span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">select</span><span style="margin:0px;padding:0px;"> value </span><span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">from</span><span style="margin:0px;padding:0px;"> v$parameter </span><span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">where</span><span style="margin:0px;padding:0px;"> </span><span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">name</span><span style="margin:0px;padding:0px;">=</span><span class="string" style="margin:0px;padding:0px;color:blue;">'db_block_size'</span><span style="margin:0px;padding:0px;">) p </span></span>
</li>
<li class="alt" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;">
<span style="margin:0px;padding:0px;color:black;"><span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">where</span><span style="margin:0px;padding:0px;"> ktssoses = s.saddr </span></span>
</li>
<li class="" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;background-color:#F8F8F8;">
<span style="margin:0px;padding:0px;color:black;"> <span class="op" style="margin:0px;padding:0px;color:#808080;">and</span><span style="margin:0px;padding:0px;"> ktssosno = s.serial#; </span></span>
</li>
</ol>
</div>
<p style="padding-top:5px;padding-right:20px;padding-bottom:5px;">
要展开的第2点是,v$sort_usage中的SEGTYPE列的不同的值各有什么意义:
</p>
<ol style="margin:10px 0px;padding:0px 40px;">
<li style="margin:0px;padding:2px 0px;">
SORT:SQL排序使用的临时段,包括order by、group by、union、distinct、窗口函数(window function)、建索引等产生的排序。
</li>
<li style="margin:0px;padding:2px 0px;">
DATA:临时表(Global Temporary Table)存储数据使有的段。
</li>
<li style="margin:0px;padding:2px 0px;">
INDEX:临时表上建的索引使用的段。
</li>
<li style="margin:0px;padding:2px 0px;">
HASH:hash算法,如hash连接所使用的临时段。
</li>
<li style="margin:0px;padding:2px 0px;">
LOB_DATA和LOB_INDEX:临时LOB使用的临时段。
</li>
</ol>
<p style="padding-top:5px;padding-right:20px;padding-bottom:5px;">
根据上述的段类型,大体可以分为三类占用:
</p>
<ol style="margin:10px 0px;padding:0px 40px;">
<li style="margin:0px;padding:2px 0px;">
SQL语句排序、HASH JOIN占用
</li>
<li style="margin:0px;padding:2px 0px;">
临时表占用
</li>
<li style="margin:0px;padding:2px 0px;">
临时LOB对象占用
</li>
</ol>
<p style="padding-top:5px;padding-right:20px;padding-bottom:5px;">
临时表空间的异常占用,一种缓步增长的,另一种情况:一下撑满的通常是一个极大数据量的排序或极大的索引的创建。缓步增长的情况,跟系统的内存被逐渐占用类似,存在“泄露”。比如排序的SQL游标没有关闭,比如本文的案例;比如会话级临时表产生了数据后一直没有清除;临时LOB对象没有清理或泄露。前两种比较好去分析处理,但是临时LOB的泄露问题就复杂很多。
</p>
<p style="padding-top:5px;padding-right:20px;padding-bottom:5px;">
来看一个测试:
</p>
<div class="dp-highlighter" style="margin:18px 0px;padding:1px 0px 0px;font-family:Consolas, 'Courier New', Courier, mono;font-size:12px;width:653.390625px;overflow:auto;background-color:#E7E5DC;">
<div class="bar" style="margin:0px;padding:0px 0px 0px 45px;">
<div class="tools" style="margin:0px;padding:3px 8px 10px 10px;font-stretch:normal;font-size:9px;line-height:normal;font-family:Verdana, Geneva, Arial, Helvetica, sans-serif;color:silver;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;background-color:#F8F8F8;">
<a href="http://www.laoxiong.net/temporary_tablespace_excessive_usage_case.html#" style="margin:0px 10px 0px 0px;padding:0px;color:#A0A0A0;text-decoration:none;outline-color:invert;outline-style:none;font-size:9px;">view plain</a><a href="http://www.laoxiong.net/temporary_tablespace_excessive_usage_case.html#" style="margin:0px 10px 0px 0px;padding:0px;color:#A0A0A0;text-decoration:none;outline-color:invert;outline-style:none;font-size:9px;">copy to clipboard</a><a href="http://www.laoxiong.net/temporary_tablespace_excessive_usage_case.html#" style="margin:0px 10px 0px 0px;padding:0px;color:#A0A0A0;text-decoration:none;outline-color:invert;outline-style:none;font-size:9px;">print</a><a href="http://www.laoxiong.net/temporary_tablespace_excessive_usage_case.html#" style="margin:0px 10px 0px 0px;padding:0px;color:#A0A0A0;text-decoration:none;outline-color:invert;outline-style:none;font-size:9px;">?</a>
</div>
</div>
<ol start="1" class="dp-sql" style="margin:0px 0px 1px 45px;padding:0px;list-style:decimal-leading-zero;color:#5C5C5C;background-color:#FFFFFF;">
<li class="alt" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;">
<span style="margin:0px;padding:0px;color:black;"><span style="margin:0px;padding:0px;"> </span><span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">select</span><span style="margin:0px;padding:0px;"> sid </span><span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">from</span><span style="margin:0px;padding:0px;"> v$mystat </span><span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">where</span><span style="margin:0px;padding:0px;"> rownum<=1; </span></span>
</li>
<li class="" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;background-color:#F8F8F8;">
<span style="margin:0px;padding:0px;color:black;"> </span>
</li>
<li class="alt" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;">
<span style="margin:0px;padding:0px;color:black;"> SID </span>
</li>
<li class="" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;background-color:#F8F8F8;">
<span style="margin:0px;padding:0px;color:black;"><span class="comment" style="margin:0px;padding:0px;color:#008200;">-----------</span><span style="margin:0px;padding:0px;"> </span></span>
</li>
<li class="alt" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;">
<span style="margin:0px;padding:0px;color:black;"> 1773 </span>
</li>
<li class="" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;background-color:#F8F8F8;">
<span style="margin:0px;padding:0px;color:black;"> <span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">declare</span><span style="margin:0px;padding:0px;"> </span></span>
</li>
<li class="alt" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;">
<span style="margin:0px;padding:0px;color:black;"> 2 v_lob clob; </span>
</li>
<li class="" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;background-color:#F8F8F8;">
<span style="margin:0px;padding:0px;color:black;"> 3 <span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">begin</span><span style="margin:0px;padding:0px;"> </span></span>
</li>
<li class="alt" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;">
<span style="margin:0px;padding:0px;color:black;"> 4 dbms_lob.createtemporary(v_lob,<span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">true</span><span style="margin:0px;padding:0px;">); </span></span>
</li>
<li class="" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;background-color:#F8F8F8;">
<span style="margin:0px;padding:0px;color:black;"> 5 dbms_lob.writeappend(v_lob,1000,lpad(<span class="string" style="margin:0px;padding:0px;color:blue;">'a'</span><span style="margin:0px;padding:0px;">,1000,</span><span class="string" style="margin:0px;padding:0px;color:blue;">'a'</span><span style="margin:0px;padding:0px;">)); </span></span>
</li>
<li class="alt" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;">
<span style="margin:0px;padding:0px;color:black;"> 6 <span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">end</span><span style="margin:0px;padding:0px;">; </span></span>
</li>
<li class="" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;background-color:#F8F8F8;">
<span style="margin:0px;padding:0px;color:black;"> 7 / </span>
</li>
</ol>
</div>
<p style="padding-top:5px;padding-right:20px;padding-bottom:5px;">
上述的代码执行完之后,在另一个窗口中,我们查询v$sort_usage:
</p>
<div class="dp-highlighter" style="margin:18px 0px;padding:1px 0px 0px;font-family:Consolas, 'Courier New', Courier, mono;font-size:12px;width:653.390625px;overflow:auto;background-color:#E7E5DC;">
<div class="bar" style="margin:0px;padding:0px 0px 0px 45px;">
<div class="tools" style="margin:0px;padding:3px 8px 10px 10px;font-stretch:normal;font-size:9px;line-height:normal;font-family:Verdana, Geneva, Arial, Helvetica, sans-serif;color:silver;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;background-color:#F8F8F8;">
<a href="http://www.laoxiong.net/temporary_tablespace_excessive_usage_case.html#" style="margin:0px 10px 0px 0px;padding:0px;color:#A0A0A0;text-decoration:none;outline-color:invert;outline-style:none;font-size:9px;">view plain</a><a href="http://www.laoxiong.net/temporary_tablespace_excessive_usage_case.html#" style="margin:0px 10px 0px 0px;padding:0px;color:#A0A0A0;text-decoration:none;outline-color:invert;outline-style:none;font-size:9px;">copy to clipboard</a><a href="http://www.laoxiong.net/temporary_tablespace_excessive_usage_case.html#" style="margin:0px 10px 0px 0px;padding:0px;color:#A0A0A0;text-decoration:none;outline-color:invert;outline-style:none;font-size:9px;">print</a><a href="http://www.laoxiong.net/temporary_tablespace_excessive_usage_case.html#" style="margin:0px 10px 0px 0px;padding:0px;color:#A0A0A0;text-decoration:none;outline-color:invert;outline-style:none;font-size:9px;">?</a>
</div>
</div>
<ol start="1" class="dp-sql" style="margin:0px 0px 1px 45px;padding:0px;list-style:decimal-leading-zero;color:#5C5C5C;background-color:#FFFFFF;">
<li class="alt" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;">
<span style="margin:0px;padding:0px;color:black;"><span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">select</span><span style="margin:0px;padding:0px;"> a.sql_id sort_sql_id,b.sql_id,b.prev_sql_id, contents,segtype,blocks*8/1024/1024 gb </span></span>
</li>
<li class="" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;background-color:#F8F8F8;">
<span style="margin:0px;padding:0px;color:black;"> 2 <span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">from</span><span style="margin:0px;padding:0px;"> v$sort_usage a,v$session b </span></span>
</li>
<li class="alt" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;">
<span style="margin:0px;padding:0px;color:black;"> 3 <span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">where</span><span style="margin:0px;padding:0px;"> a.session_addr=b.saddr </span></span>
</li>
<li class="" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;background-color:#F8F8F8;">
<span style="margin:0px;padding:0px;color:black;"> 4 <span class="op" style="margin:0px;padding:0px;color:#808080;">and</span><span style="margin:0px;padding:0px;"> b.sid=1773; </span></span>
</li>
<li class="alt" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;">
<span style="margin:0px;padding:0px;color:black;"> </span>
</li>
<li class="" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;background-color:#F8F8F8;">
<span style="margin:0px;padding:0px;color:black;">SORT_SQL_ID SQL_ID PREV_SQL_ID CONTENTS SEGTYPE GB </span>
</li>
<li class="alt" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;">
<span style="margin:0px;padding:0px;color:black;"><span class="comment" style="margin:0px;padding:0px;color:#008200;">------------- ------------- ------------- --------- --------- -----------</span><span style="margin:0px;padding:0px;"> </span></span>
</li>
<li class="" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;background-color:#F8F8F8;">
<span style="margin:0px;padding:0px;color:black;">9babjv8yq8ru3 9babjv8yq8ru3 <span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">TEMPORARY</span><span style="margin:0px;padding:0px;"> LOB_DATA .0004882813 </span></span>
</li>
<li class="alt" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;">
<span style="margin:0px;padding:0px;color:black;"> </span>
</li>
<li class="" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;background-color:#F8F8F8;">
<span style="margin:0px;padding:0px;color:black;">@sqlbyid 9babjv8yq8ru3 </span>
</li>
<li class="alt" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;">
<span style="margin:0px;padding:0px;color:black;"> </span>
</li>
<li class="" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;background-color:#F8F8F8;">
<span style="margin:0px;padding:0px;color:black;">SQL_FULLTEXT </span>
</li>
<li class="alt" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;">
<span style="margin:0px;padding:0px;color:black;"><span class="comment" style="margin:0px;padding:0px;color:#008200;">---------------------------------------------------------------------------</span><span style="margin:0px;padding:0px;"> </span></span>
</li>
<li class="" style="margin:0px;padding:2px 0px 2px 10px;border-left-width:3px;border-left-style:solid;border-left-color:#6CE26C;line-height:14px;background-color:#F8F8F8;">
<span style="margin:0px;padding:0px;color:black;"><span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">BEGIN</span><span style="margin:0px;padding:0px;"> DBMS_OUTPUT.GET_LINES(:LINES, :NUMLINES); </span><span class="keyword" style="margin:0px;padding:0px;color:#006699;font-weight:bold;">END</span><span style="margin:0px;padding:0px;">; </span></span>
</li>
</ol>
</div>
<p style="padding-top:5px;padding-right:20px;padding-bottom:5px;">
可以看到,这个会话已经产生了类型为LOB_DATA的临时段。虽然SQL代码已经执行完成,会话已经处于空闲状态,但是临时段仍然存在着。
</p>
<p style="padding-top:5px;padding-right:20px;padding-bottom:5px;">
Oracle中的LOB变量,类似于C语句中的指针,或者类似于JAVA代码中的数据库连接Connection,是需要释放的。上述有问题的代码,缺少了释放LOB的代码:dbms_log.freetemporary(v_lob)。好在对于这种情况,Oracle提供了一个补救措施,就是设置60025事件可以自动清理掉不活动的LOB,只需要在参数文件中加上event='60025 trace name context forever'。
</p>
<p style="padding-top:5px;padding-right:20px;padding-bottom:5px;">
在Oracle数据库中,xmltype类型内部也实际上是LOB类型,xmltype类型的数据操作可能会产生较多的LOB临时段。lob类型的字段上的更改操作,比如lob拼接等,同样会产生LOB临时段。如果在v$sort_usage中发现大量的LOB类型的临时段,那么通常是由于代码存在问题,没有释放LOB,或者是由于Oracle本身的BUG。在MOS上,如果以lob temporary关键字搜索,会发现相当多的关于lob临时段的泄露或临时段没有释放相关的文档。
</p>
<p style="padding-top:5px;padding-right:20px;padding-bottom:5px;">
最后,不管是什么情况导致的临时表空间被过多占用,通常重启应用能够释放掉临时段,因为会话退出后,相对应的临时段就会被释放。看来,“重启”大法在这种情况下就很有用。
</p>
<p style="padding-top:5px;padding-right:20px;padding-bottom:5px;">
--The END.
</p>
<div id="crp_related" style="margin:0px;padding:0px;">
</div>
<div style="margin:0px;padding:0px;clear:both;">
</div>
</div>
<div class="info" style="margin:0px;padding:10px 0px;color:#666666;font-family:'Lucida Grande', 'Segoe UI', 'Bitstream Vera Sans', Tahoma, Verdana, Arial, sans-serif;font-size:13px;line-height:20.7999992370605px;white-space:normal;background-color:#FFFFFF;">
Address: <a href="http://www.laoxiong.net/temporary_tablespace_excessive_usage_case.html" rel="bookmark" title="一次临时表空间大量占用问题的处理" style="margin:0px;padding:0px;color:#666666;text-decoration:none;outline-color:invert;outline-style:none;">http://www.laoxiong.net/temporary_tablespace_excessive_usage_case.html</a>
</div>
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/28628435/viewspace-1984360/
,如需转载,请注明出处,否则将追究法律责任。