﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-背着手扇扇子的人-随笔分类-oracle</title><link>http://www.blogjava.net/kebo/category/6811.html</link><description>往事随风......前事如梦......
</description><language>zh-cn</language><lastBuildDate>Thu, 13 Sep 2007 13:03:22 GMT</lastBuildDate><pubDate>Thu, 13 Sep 2007 13:03:22 GMT</pubDate><ttl>60</ttl><item><title>一次sql调优历程</title><link>http://www.blogjava.net/kebo/archive/2007/09/10/144078.html</link><dc:creator>kebo</dc:creator><author>kebo</author><pubDate>Mon, 10 Sep 2007 11:35:00 GMT</pubDate><guid>http://www.blogjava.net/kebo/archive/2007/09/10/144078.html</guid><wfw:comment>http://www.blogjava.net/kebo/comments/144078.html</wfw:comment><comments>http://www.blogjava.net/kebo/archive/2007/09/10/144078.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kebo/comments/commentRss/144078.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kebo/services/trackbacks/144078.html</trackback:ping><description><![CDATA[<p>在项目进入性能测试阶段，终于爆发了sql运行缓慢，系统吞吐量下降，甚至一度出现oracle服务器cpu100%的情况。具体开发和测试人员报告情况，开始介入处理。<br /><br />具体查找性能缓慢的过程略除。<br />发现一条sql运行缓慢。通过跟踪发现一下信息<br /><span lang="EN-US">select alias_p2.pendingid, alias_p2.workitemid, alias_p2.operationid, alias_p2.operationkey,</span></p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-spacerun: yes">  </span>2<span style="mso-spacerun: yes">  </span>alias_p2.title, alias_p2.sendercn, alias_p2.operatedes, alias_p2.pendingstate,</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-spacerun: yes">  </span>3<span style="mso-spacerun: yes">  </span>alias_p2.parameter, alias_p2.createdate, alias_p2.deptname, alias_p2.completeddate ,</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-spacerun: yes">  </span>4<span style="mso-spacerun: yes">  </span>alias_p2.openstate , alias_p2.name, alias_p2.processinstanceid, alias_p2.asset</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-spacerun: yes">  </span>5<span style="mso-spacerun: yes">   </span>from ( select alias_p1.pendingid, alias_p1.workitemid, alias_p1.operationid,</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-spacerun: yes">  </span>6<span style="mso-spacerun: yes">   </span>alias_p1.operationkey, alias_p1.title, alias_p1.sendercn, alias_p1.operatedes,</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-spacerun: yes">  </span>7<span style="mso-spacerun: yes">    </span>alias_p1.pendingstate, alias_p1.parameter, alias_p1.createdate, alias_p1.deptname,</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-spacerun: yes">  </span>8<span style="mso-spacerun: yes">      </span>alias_p1.completeddate , alias_p1.openstate , alias_p1.name, alias_p1.processinstanceid ,</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-spacerun: yes">  </span>9<span style="mso-spacerun: yes">        </span>alias_p1.asset , rownum rn from(select alias_p.pendingid, alias_p.workitemid, alias_p.operationid,</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-spacerun: yes"> </span>10<span style="mso-spacerun: yes">        </span>alias_p.operationkey, alias_p.title, alias_p.sendercn, alias_p.operatedes, alias_p.pendingstate,</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-spacerun: yes"> </span>11<span style="mso-spacerun: yes">        </span>alias_p.parameter, alias_p.createdate, alias_p.deptname, alias_p.completeddate , alias_p.openstate ,</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-spacerun: yes"> </span>12<span style="mso-spacerun: yes">         </span>pd.name, w.processinstanceid , eam_db.concatassetname( alias_p.operationkey, alias_p.operationid )</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-spacerun: yes"> </span>13<span style="mso-spacerun: yes">          </span>asset from WF_Pending alias_p, WF_WorkItem w, WF_ProcessDefinition pd, WF_ProcessInstance pi</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-spacerun: yes"> </span>14<span style="mso-spacerun: yes">          </span>where alias_p.ownerid='qinxue'<span style="mso-spacerun: yes">   </span>and alias_p.pendingstate in(0,3,5,7,9,10,11,12)</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-spacerun: yes"> </span>15<span style="mso-spacerun: yes">            </span>and (alias_p.deptname='</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">审控部信息处</span>
				<span lang="EN-US">' or alias_p.deptname='' or alias_p.deptname is null)</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-spacerun: yes"> </span>16<span style="mso-spacerun: yes">            </span>and w.workitemid = alias_p.workitemid<span style="mso-spacerun: yes">   </span>and pi.processinstanceid = w.processinstanceid</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-spacerun: yes"> </span>17<span style="mso-spacerun: yes">  </span>and pi.completeddate is null<span style="mso-spacerun: yes">   </span>and pd.processdefinitionid = w.processdefinitionid<span style="mso-spacerun: yes">  </span>order by alias_p.createdate desc) alias_p1 where rownum &lt;=10)</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">alias_p2 where rn&gt;=1;</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?>
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">已选择</span>
				<span lang="EN-US">10</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">行。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">执行计划</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">----------------------------------------------------------</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-spacerun: yes">   </span>0<span style="mso-spacerun: yes">      </span>SELECT STATEMENT Optimizer=CHOOSE (Cost=10 Card=1 Bytes=2507</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-spacerun: yes">          </span>)</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-spacerun: yes">   </span>1<span style="mso-spacerun: yes">    </span>0<span style="mso-spacerun: yes">   </span>VIEW (Cost=10 Card=1 Bytes=2507)</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-spacerun: yes">   </span>2<span style="mso-spacerun: yes">    </span>1<span style="mso-spacerun: yes">     </span>COUNT (STOPKEY)</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-spacerun: yes">   </span>3<span style="mso-spacerun: yes">    </span>2<span style="mso-spacerun: yes">       </span>VIEW (Cost=10 Card=1 Bytes=2494)</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-spacerun: yes">   </span>4<span style="mso-spacerun: yes">    </span>3<span style="mso-spacerun: yes">         </span>SORT (ORDER BY STOPKEY) (Cost=10 Card=1 Bytes=167)</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-spacerun: yes">   </span>5<span style="mso-spacerun: yes">    </span>4<span style="mso-spacerun: yes">           </span>NESTED LOOPS (Cost=8 Card=1 Bytes=167)</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-spacerun: yes">   </span>6<span style="mso-spacerun: yes">    </span>5<span style="mso-spacerun: yes">             </span>NESTED LOOPS (Cost=7 Card=1 Bytes=162)</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-spacerun: yes">   </span>7<span style="mso-spacerun: yes">    </span>6<span style="mso-spacerun: yes">               </span>NESTED LOOPS (Cost=6 Card=1 Bytes=134)</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-spacerun: yes">   </span>8<span style="mso-spacerun: yes">    </span>7<span style="mso-spacerun: yes">                 </span>TABLE ACCESS (FULL) OF 'WF_PENDING' (Cost=5</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-spacerun: yes">          </span>Card=1 Bytes=111)</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-spacerun: yes">   </span>9<span style="mso-spacerun: yes">    </span>7<span style="mso-spacerun: yes">                 </span>TABLE ACCESS (BY INDEX ROWID) OF 'WF_WORKITE</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-spacerun: yes">          </span>M' (Cost=1 Card=3 Bytes=69)</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-spacerun: yes">  </span>10<span style="mso-spacerun: yes">    </span>9<span style="mso-spacerun: yes">                   </span>INDEX (UNIQUE SCAN) OF 'SYS_C003694' (UNIQ</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-outline-level: 1">
				<span lang="EN-US">
						<span style="mso-spacerun: yes">          </span>UE)</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-spacerun: yes">  </span>11<span style="mso-spacerun: yes">    </span>6<span style="mso-spacerun: yes">               </span>TABLE ACCESS (BY INDEX ROWID) OF 'WF_PROCESSDE</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-spacerun: yes">          </span>FINITION' (Cost=1 Card=1 Bytes=28)</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-spacerun: yes">  </span>12<span style="mso-spacerun: yes">   </span>11<span style="mso-spacerun: yes">                 </span>INDEX (UNIQUE SCAN) OF 'SYS_C003684' (UNIQUE</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-spacerun: yes">          </span>)</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-spacerun: yes">  </span>13<span style="mso-spacerun: yes">    </span>5<span style="mso-spacerun: yes">             </span>TABLE ACCESS (BY INDEX ROWID) OF 'WF_PROCESSINST</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-spacerun: yes">          </span>ANCE' (Cost=1 Card=1 Bytes=5)</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-spacerun: yes">  </span>14<span style="mso-spacerun: yes">   </span>13<span style="mso-spacerun: yes">               </span>INDEX (UNIQUE SCAN) OF 'SYS_C003662' (UNIQUE)</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">统计信息</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">----------------------------------------------------------</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-spacerun: yes">        </span>314<span style="mso-spacerun: yes">  </span>recursive calls</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-outline-level: 1">
				<span lang="EN-US">
						<span style="mso-spacerun: yes">          </span>0<span style="mso-spacerun: yes">  </span>db block gets</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-spacerun: yes">     </span>
						<span style="COLOR: #ff6600">
								<span style="mso-spacerun: yes"> </span>29433<span style="mso-spacerun: yes">  </span>consistent gets<o:p></o:p></span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-spacerun: yes">          </span>0<span style="mso-spacerun: yes">  </span>physical reads</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-spacerun: yes">     </span>
						<span style="mso-spacerun: yes">     </span>0<span style="mso-spacerun: yes">  </span>redo size</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-spacerun: yes">       </span>2153<span style="mso-spacerun: yes">  </span>bytes sent via SQL*Net to client</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-spacerun: yes">        </span>372<span style="mso-spacerun: yes">  </span>bytes received via SQL*Net from client</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-spacerun: yes">          </span>2<span style="mso-spacerun: yes">  </span>SQL*Net roundtrips to/from client</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-spacerun: yes">        </span>
						<span style="COLOR: #ff6600">101<span style="mso-spacerun: yes">  </span>sorts (memory)<o:p></o:p></span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-spacerun: yes">          </span>0<span style="mso-spacerun: yes">  </span>sorts (disk)</span>
		</p>
		<p>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">
						<span style="mso-spacerun: yes">         </span>10<span style="mso-spacerun: yes">  </span>rows processed<br /><br />其中一致读达到近3万次，关联调用出现314次。排序数值也非常多，显然第一目标是把这两个数据降下来。<br />通过进一步的分析。发现出现这些问题的主要原因是调用<font size="3">eam_db.concatassetname( alias_p.operationkey, alias_p.operationid )这个包。<br />开始考虑直接在sql外层做关联，不用function来实现。利用聚集函数来合并数据。<br />着手建立：<br /><br />聚集函数： CREATE OR REPLACE FUNCTION F_ASSETLINK(P_STR VARCHAR2) RETURN VARCHAR2<br />AGGREGATE USING asset_link;</font></span>
		</p>
		<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">
				<font size="3">
						<p>
								<br />----------------------<br />创建type：CREATE OR REPLACE TYPE ASSET_LINK AS OBJECT (<br />STR VARCHAR2(30000),<br />STATIC FUNCTION ODCIAGGREGATEINITIALIZE(SCTX IN OUT ASSET_LINK) RETURN NUMBER,<br />MEMBER FUNCTION ODCIAGGREGATEITERATE(SELF IN OUT ASSET_LINK, VALUE IN VARCHAR2) RETURN NUMBER,<br />MEMBER FUNCTION ODCIAGGREGATETERMINATE(SELF IN ASSET_LINK, RETURNVALUE OUT VARCHAR2, FLAGS IN NUMBER) RETURN NUMBER,<br />MEMBER FUNCTION ODCIAGGREGATEMERGE(SELF IN OUT ASSET_LINK, CTX2 IN ASSET_LINK) RETURN NUMBER<br />)<br />------------------------------------------------------</p>
						<p>创建type body：CREATE OR REPLACE TYPE BODY ASSET_LINK IS<br />STATIC FUNCTION ODCIAGGREGATEINITIALIZE(SCTX IN OUT ASSET_LINK) RETURN NUMBER IS<br />BEGIN<br />SCTX := ASSET_LINK(NULL);<br />RETURN ODCICONST.SUCCESS;<br />END;<br />MEMBER FUNCTION ODCIAGGREGATEITERATE(SELF IN OUT ASSET_LINK, VALUE IN VARCHAR2) RETURN NUMBER IS<br />BEGIN<br />SELF.STR := SELF.STR ||','|| VALUE;<br />RETURN ODCICONST.SUCCESS;<br />END;<br />MEMBER FUNCTION ODCIAGGREGATETERMINATE(SELF IN ASSET_LINK, RETURNVALUE OUT VARCHAR2, FLAGS IN NUMBER) RETURN NUMBER IS<br />BEGIN<br />RETURNVALUE := SELF.STR;<br />RETURN ODCICONST.SUCCESS;<br />END;<br />MEMBER FUNCTION ODCIAGGREGATEMERGE(SELF IN OUT ASSET_LINK, CTX2 IN ASSET_LINK) RETURN NUMBER IS<br />BEGIN<br />NULL;<br />RETURN ODCICONST.SUCCESS;<br />END;<br />END;<br />调整sql如下：<br />select alias_p.pendingid, alias_p.workitemid, alias_p.operationid,<br />   alias_p.operationkey, alias_p.title, alias_p.sendercn, alias_p.operatedes, alias_p.pendingstate,<br />   alias_p.parameter, alias_p.createdate, alias_p.deptname, alias_p.completeddate , alias_p.openstate ,<br />   pd.name, w.processinstanceid <br />   --,T.ASSETCLASS3  ASSET   <br />   ,f_assetlink(d3.typename) ASSET<br />   --,eam_db.concatassetname( alias_p.operationkey, alias_p.operationid )  asset <br />   from WF_Pending alias_p, WF_WorkItem w, <br />   WF_ProcessDefinition pd, WF_ProcessInstance pi<br />   , tb_asset_dizhiyihao T,dic_app_wfconfig wfc,dic_app_assettype3 d3<br />   where alias_p.ownerid='qinxue'   <br />   and alias_p.pendingstate in(0,3,5,7,9,10,11,12)<br />   and (alias_p.deptname='审控部信息处' or alias_p.deptname='' or alias_p.deptname is null)<br />   and w.workitemid = alias_p.workitemid   <br />   and pi.processinstanceid = w.processinstanceid<br />   and pi.completeddate is null   <br />   and pd.processdefinitionid = w.processdefinitionid<br />   AND    t.pk_businessid = alias_p.operationid <br />          and alias_p.operationkey = wfc.memo_1<br />          and wfc.wfconfig_code = t.wfconfig_code<br />   and t.assetclass3 = d3.assettype3_id<br />   group by alias_p.pendingid, alias_p.workitemid, alias_p.operationid,<br />   alias_p.operationkey, alias_p.title, alias_p.sendercn, alias_p.operatedes, alias_p.pendingstate,<br />   alias_p.parameter, alias_p.createdate, alias_p.deptname, alias_p.completeddate , alias_p.openstate ,<br />   pd.name, w.processinstanceid<br />   order by alias_p.createdate desc<br />得到统计数据如下：<br />C:\Documents and Settings\ibm&gt;sqlplus /nolog</p>
						<p>SQL*Plus: Release 10.2.0.1.0 - Production on 星期一 9月 10 19:27:33 2007</p>
						<p>Copyright (c) 1982, 2005, Oracle.  All rights reserved.</p>
						<p>SQL&gt; conn <a href="mailto:jic/jic@name">jic/jic@name</a><br />已连接。<br />SQL&gt; set autotrace traceonly<br />SQL&gt; select alias_p.pendingid, alias_p.workitemid, alias_p.operationid,<br />  2     alias_p.operationkey, alias_p.title, alias_p.sendercn, alias_p.operatedes, alias_p.pendingstate,<br />  3     alias_p.parameter, alias_p.createdate, alias_p.deptname, alias_p.completeddate , alias_p.openstate ,<br />  4     pd.name, w.processinstanceid<br />  5     --,T.ASSETCLASS3  ASSET<br />  6     ,f_assetlink(d3.typename) ASSET<br />  7     --,eam_db.concatassetname( alias_p.operationkey, alias_p.operationid )  asset<br />  8     from WF_Pending alias_p, WF_WorkItem w,<br />  9     WF_ProcessDefinition pd, WF_ProcessInstance pi<br /> 10     , tb_asset_dizhiyihao T,dic_app_wfconfig wfc,dic_app_assettype3 d3<br /> 11     where alias_p.ownerid='qinxue'<br /> 12     and alias_p.pendingstate in(0,3,5,7,9,10,11,12)<br /> 13     and (alias_p.deptname='审控部信息处' or alias_p.deptname='' or alias_p.deptname is null)<br /> 14     and w.workitemid = alias_p.workitemid<br /> 15     and pi.processinstanceid = w.processinstanceid<br /> 16     and pi.completeddate is null<br /> 17     and pd.processdefinitionid = w.processdefinitionid<br /> 18     AND    t.pk_businessid = alias_p.operationid<br /> 19            and alias_p.operationkey = wfc.memo_1<br /> 20            and wfc.wfconfig_code = t.wfconfig_code<br /> 21     and t.assetclass3 = d3.assettype3_id<br /> 22     group by alias_p.pendingid, alias_p.workitemid, alias_p.operationid,<br /> 23     alias_p.operationkey, alias_p.title, alias_p.sendercn, alias_p.operatedes, alias_p.pendingstate,<br /> 24     alias_p.parameter, alias_p.createdate, alias_p.deptname, alias_p.completeddate , alias_p.openstate ,<br /> 25     pd.name, w.processinstanceid<br /> 26     order by alias_p.createdate desc;</p>
						<p>已选择30行。</p>
						<p>
								<br />执行计划<br />----------------------------------------------------------<br />   0      SELECT STATEMENT Optimizer=CHOOSE (Cost=19 Card=1 Bytes=205)<br />   1    0   SORT (GROUP BY) (Cost=19 Card=1 Bytes=205)<br />   2    1     NESTED LOOPS (Cost=17 Card=1 Bytes=205)<br />   3    2       HASH JOIN (Cost=16 Card=1 Bytes=191)<br />   4    3         HASH JOIN (Cost=11 Card=1 Bytes=183)<br />   5    4           NESTED LOOPS (Cost=8 Card=1 Bytes=167)<br />   6    5             NESTED LOOPS (Cost=7 Card=1 Bytes=139)<br />   7    6               NESTED LOOPS (Cost=6 Card=1 Bytes=134)<br />   8    7                 TABLE ACCESS (FULL) OF 'WF_PENDING' (Cost=5<br />          Card=1 Bytes=111)</p>
						<p>   9    7                 TABLE ACCESS (BY INDEX ROWID) OF 'WF_WORKITE<br />          M' (Cost=1 Card=1 Bytes=23)</p>
						<p>  10    9                   INDEX (UNIQUE SCAN) OF 'SYS_C004347' (UNIQ<br />          UE)</p>
						<p>  11    6               TABLE ACCESS (BY INDEX ROWID) OF 'WF_PROCESSIN<br />          STANCE' (Cost=1 Card=1 Bytes=5)</p>
						<p>  12   11                 INDEX (UNIQUE SCAN) OF 'SYS_C004334' (UNIQUE<br />          )</p>
						<p>  13    5             TABLE ACCESS (BY INDEX ROWID) OF 'WF_PROCESSDEFI<br />          NITION' (Cost=1 Card=1 Bytes=28)</p>
						<p>  14   13               INDEX (UNIQUE SCAN) OF 'SYS_C004329' (UNIQUE)<br />  15    4           TABLE ACCESS (FULL) OF 'DIC_APP_WFCONFIG' (Cost=2<br />          Card=24 Bytes=384)</p>
						<p>  16    3         TABLE ACCESS (FULL) OF 'TB_ASSET_DIZHIYIHAO' (Cost=4<br />           Card=310 Bytes=2480)</p>
						<p>  17    2       TABLE ACCESS (BY INDEX ROWID) OF 'DIC_APP_ASSETTYPE3'<br />          (Cost=1 Card=1 Bytes=14)</p>
						<p>  18   17         INDEX (UNIQUE SCAN) OF 'PK_DIC_APP_ASSETTYPE3' (UNIQ<br />          UE)</p>
						<p> </p>
						<p> </p>
						<p>统计信息<br />----------------------------------------------------------<br />          6  recursive calls<br />          0  db block gets<br />        847  consistent gets<br />          0  physical reads<br />          0  redo size<br />       4102  bytes sent via SQL*Net to client<br />        383  bytes received via SQL*Net from client<br />          3  SQL*Net roundtrips to/from client<br />          1  sorts (memory)<br />          0  sorts (disk)</p>
						<p>其中排序由101变为1次<br />一致读降为847。下降非常客观<br />关联调用仅有6次。<br />此sql性能优化非常可观。至此优化结束：)</p>
				</font>
		</span><img src ="http://www.blogjava.net/kebo/aggbug/144078.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kebo/" target="_blank">kebo</a> 2007-09-10 19:35 <a href="http://www.blogjava.net/kebo/archive/2007/09/10/144078.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>分析函数一例</title><link>http://www.blogjava.net/kebo/archive/2007/07/17/130889.html</link><dc:creator>kebo</dc:creator><author>kebo</author><pubDate>Tue, 17 Jul 2007 08:55:00 GMT</pubDate><guid>http://www.blogjava.net/kebo/archive/2007/07/17/130889.html</guid><wfw:comment>http://www.blogjava.net/kebo/comments/130889.html</wfw:comment><comments>http://www.blogjava.net/kebo/archive/2007/07/17/130889.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kebo/comments/commentRss/130889.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kebo/services/trackbacks/130889.html</trackback:ping><description><![CDATA[select z.a,z.b,z.c
  from (select   lag(t.a,2)over(order by t.a) pp_val,
                 lag(t.a,1)over(order by t.a) p_val,
                 t.a,
                 lead(t.a,1)over(order by t.a) n_val,
                 lead(t.a,2)over(order by t.a) nn_val,
                 t.b,t.c from test2 t) z
 where z.a = '1'
   and ((z.p_val = '1' and z.pp_val = '1')
       or (z.p_val = '1' and z.n_val = '1')
       or (z.n_val = '1' and z.nn_val = '1'));<img src ="http://www.blogjava.net/kebo/aggbug/130889.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kebo/" target="_blank">kebo</a> 2007-07-17 16:55 <a href="http://www.blogjava.net/kebo/archive/2007/07/17/130889.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>夜读tom感悟</title><link>http://www.blogjava.net/kebo/archive/2007/07/11/129475.html</link><dc:creator>kebo</dc:creator><author>kebo</author><pubDate>Tue, 10 Jul 2007 16:15:00 GMT</pubDate><guid>http://www.blogjava.net/kebo/archive/2007/07/11/129475.html</guid><wfw:comment>http://www.blogjava.net/kebo/comments/129475.html</wfw:comment><comments>http://www.blogjava.net/kebo/archive/2007/07/11/129475.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kebo/comments/commentRss/129475.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kebo/services/trackbacks/129475.html</trackback:ping><description><![CDATA[查询结果xml化： select dbms_xmlquery.getXML(' select  * from test')from dual;
表的历史记录：执行：begin
dbms_wm.enableversioning('tablename','VIEW_WO_OVERWRITE')
则对这个表的cud操作都会记录历史，这个在系统中做历史再好不过了。
还有终于被tom说明：分析函数原来就是矩阵运算，呵呵，终于知道这类函数的数学原理了，呵呵，真爽，总算知道怎么理解了。
还有宝贝儿遇到新项目，需要很深的会计知识了，还被老板乱说，导致不好工作，希望她不要烦恼，开心工作<img src ="http://www.blogjava.net/kebo/aggbug/129475.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kebo/" target="_blank">kebo</a> 2007-07-11 00:15 <a href="http://www.blogjava.net/kebo/archive/2007/07/11/129475.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>sqlplus执行@sql.sql的错误</title><link>http://www.blogjava.net/kebo/archive/2006/12/27/90390.html</link><dc:creator>kebo</dc:creator><author>kebo</author><pubDate>Wed, 27 Dec 2006 14:24:00 GMT</pubDate><guid>http://www.blogjava.net/kebo/archive/2006/12/27/90390.html</guid><wfw:comment>http://www.blogjava.net/kebo/comments/90390.html</wfw:comment><comments>http://www.blogjava.net/kebo/archive/2006/12/27/90390.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kebo/comments/commentRss/90390.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kebo/services/trackbacks/90390.html</trackback:ping><description><![CDATA[今天给数据库执行@spcreate.sql老是出
<br />SP2-0734:unknown command beginning "spcreate.s..." - rest of line ignored.

<br />郁闷坏了。经过一番折腾原来是
<br />solution Description:<br /> =====================

<br />You need to enter a valid SQL*Plus command. 

<br />In this case, you cannot start svrmgrl from within SQL*Plus, <br />you have to start 
svrmgrl from the command prompt.

<br />This error will also occur when trying to execute a <br /><font color="#ff0000"><b>the @ 
symbol is mapped to the key 'Kill'</b></font> from the user's keyboard.  <br />The
way to find out the current keyboard mapping in a unix environment is 
using the command 'stty -a'.  <br />The way to correct problem is to map 'Kill' 
to some other keyboard symbol.  <br />The command example would be 
'<b><font color="#ff0000">stty kill ^U</font></b>'.  <br />Having remapped the key you would then log into SQL*Plus
and execute script.<br /> -------------------------------纪念一下<br />如果出现空行报错的话
记得执行:
<br />SET SQLBLANKLINES ON<img src ="http://www.blogjava.net/kebo/aggbug/90390.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kebo/" target="_blank">kebo</a> 2006-12-27 22:24 <a href="http://www.blogjava.net/kebo/archive/2006/12/27/90390.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>听oracle讲座感受</title><link>http://www.blogjava.net/kebo/archive/2006/10/03/73244.html</link><dc:creator>kebo</dc:creator><author>kebo</author><pubDate>Mon, 02 Oct 2006 17:43:00 GMT</pubDate><guid>http://www.blogjava.net/kebo/archive/2006/10/03/73244.html</guid><wfw:comment>http://www.blogjava.net/kebo/comments/73244.html</wfw:comment><comments>http://www.blogjava.net/kebo/archive/2006/10/03/73244.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kebo/comments/commentRss/73244.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kebo/services/trackbacks/73244.html</trackback:ping><description><![CDATA[<div align="left">  今天听了下oracle讲座,一个感受，以后不敢操作数据库了，发现对大多数数据库命令产生的后果和影响都不是很清楚。想起以前切换双机<br /><br />的时候也出现eygle说的问题，然来真的对数据库基础知识预备不足啊。感觉以前真是可以称为“虎胆”哦。难怪老幕以前佩服我！！！卡卡卡。<br /><br />恩，感觉oracle入门现在都够不上，不敢再给别人解决问题:)免得惹笑话。梳理了一下，估计也就对sql,集合的理解熟悉点，有点把我哦。低<br /><br />调，低调......学习学习......<br /></div><img src ="http://www.blogjava.net/kebo/aggbug/73244.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kebo/" target="_blank">kebo</a> 2006-10-03 01:43 <a href="http://www.blogjava.net/kebo/archive/2006/10/03/73244.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>aix   设置 ip需要注意的地方</title><link>http://www.blogjava.net/kebo/archive/2006/04/14/41105.html</link><dc:creator>kebo</dc:creator><author>kebo</author><pubDate>Fri, 14 Apr 2006 07:06:00 GMT</pubDate><guid>http://www.blogjava.net/kebo/archive/2006/04/14/41105.html</guid><wfw:comment>http://www.blogjava.net/kebo/comments/41105.html</wfw:comment><comments>http://www.blogjava.net/kebo/archive/2006/04/14/41105.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/kebo/comments/commentRss/41105.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kebo/services/trackbacks/41105.html</trackback:ping><description><![CDATA[　这几天很郁闷，公司弄来一台IBM小机．让我装系统．在公司的时候用DHCP给分配ＩＰ,安装好系统和oracle后，拉到现场设置静态ip后就是无法联网<br />ip怎么设置也不正确。经检查网线和交换机都是正常的。同样的ip和网线用本是没有任何问题的。最后只好找公司的主机工程师来调试了。来了也是设置半天也没有成功，当中还问过ibm的工程师，也没有搞定。哎，把我们俩给郁闷的。最后同事找了一个朋友问，一步一步地做，才发现经过DHCP后在按一般的步骤设置是不可以的，必须重新设置网卡的状态，设置ip后重起（？）。经过3个多小时的折腾，网络终于调试正常。记blog，留为纪念<img src ="http://www.blogjava.net/kebo/aggbug/41105.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kebo/" target="_blank">kebo</a> 2006-04-14 15:06 <a href="http://www.blogjava.net/kebo/archive/2006/04/14/41105.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>sql</title><link>http://www.blogjava.net/kebo/archive/2006/03/29/38030.html</link><dc:creator>kebo</dc:creator><author>kebo</author><pubDate>Wed, 29 Mar 2006 05:41:00 GMT</pubDate><guid>http://www.blogjava.net/kebo/archive/2006/03/29/38030.html</guid><wfw:comment>http://www.blogjava.net/kebo/comments/38030.html</wfw:comment><comments>http://www.blogjava.net/kebo/archive/2006/03/29/38030.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kebo/comments/commentRss/38030.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kebo/services/trackbacks/38030.html</trackback:ping><description><![CDATA[(转)<br /><br /><br /><br />-- 逻辑读多的SQL <br />select * from (select buffer_gets, sql_text <br />from v$sqlarea <br />where buffer_gets &gt; 500000 <br />order by buffer_gets desc) where rownum&lt;=30; <br /><br />-- 执行次数多的SQL <br />select sql_text,executions from <br />(select sql_text,executions from v$sqlarea order by executions desc) <br />where rownum&lt;81; <br /><br />-- 读硬盘多的SQL <br />select sql_text,disk_reads from <br />(select sql_text,disk_reads from v$sqlarea order by disk_reads desc) <br />where rownum&lt;21; <br /><br />-- 排序多的SQL <br />select sql_text,sorts from <br />(select sql_text,sorts from v$sqlarea order by sorts desc) <br />where rownum&lt;21; <br /><br />--分析的次数太多，执行的次数太少，要用绑变量的方法来写sql <br />set pagesize 600; <br />set linesize 120; <br />select substr(sql_text,1,80) "sql", count(*), sum(executions) "totexecs" <br />from v$sqlarea <br />where executions &lt; 5 <br />group by substr(sql_text,1,80) <br />having count(*) &gt; 30 <br />order by 2;<img src ="http://www.blogjava.net/kebo/aggbug/38030.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kebo/" target="_blank">kebo</a> 2006-03-29 13:41 <a href="http://www.blogjava.net/kebo/archive/2006/03/29/38030.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle分页的一种写法</title><link>http://www.blogjava.net/kebo/archive/2006/01/30/29368.html</link><dc:creator>kebo</dc:creator><author>kebo</author><pubDate>Mon, 30 Jan 2006 04:00:00 GMT</pubDate><guid>http://www.blogjava.net/kebo/archive/2006/01/30/29368.html</guid><wfw:comment>http://www.blogjava.net/kebo/comments/29368.html</wfw:comment><comments>http://www.blogjava.net/kebo/archive/2006/01/30/29368.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kebo/comments/commentRss/29368.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kebo/services/trackbacks/29368.html</trackback:ping><description><![CDATA[<SPAN style="FONT-WEIGHT: bold; COLOR: #993333" ?>SELECT</SPAN> * <SPAN style="FONT-WEIGHT: bold; COLOR: #993333" ?>FROM</SPAN> <SPAN style="COLOR: #66cc66">(</SPAN> <SPAN style="FONT-WEIGHT: bold; COLOR: #993333" ?>SELECT</SPAN> row_.*, rownum rownum_ <SPAN style="FONT-WEIGHT: bold; COLOR: #993333" ?>FROM</SPAN> <SPAN style="COLOR: #66cc66">(</SPAN>...... <SPAN style="COLOR: #66cc66">)</SPAN> row_ <SPAN style="FONT-WEIGHT: bold; COLOR: #993333" ?>WHERE</SPAN> rownum &lt;= ?<SPAN style="COLOR: #66cc66">)</SPAN> <SPAN style="FONT-WEIGHT: bold; COLOR: #993333" ?>WHERE</SPAN> rownum_ &gt; ?<img src ="http://www.blogjava.net/kebo/aggbug/29368.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kebo/" target="_blank">kebo</a> 2006-01-30 12:00 <a href="http://www.blogjava.net/kebo/archive/2006/01/30/29368.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>人生不如意十有八九</title><link>http://www.blogjava.net/kebo/archive/2006/01/08/27112.html</link><dc:creator>kebo</dc:creator><author>kebo</author><pubDate>Sun, 08 Jan 2006 01:33:00 GMT</pubDate><guid>http://www.blogjava.net/kebo/archive/2006/01/08/27112.html</guid><wfw:comment>http://www.blogjava.net/kebo/comments/27112.html</wfw:comment><comments>http://www.blogjava.net/kebo/archive/2006/01/08/27112.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kebo/comments/commentRss/27112.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kebo/services/trackbacks/27112.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 今天要去给数据库装Partition组件，下一个晚上的oracle，不想机器自动重启了。早上听到硬盘没有响，以为下完了。在床上挺高兴的，可是一看确实机器重启过，没有下了，只下了很少一点点，埃，郁闷的我，今天必须做完这个，不然明天就不能用了，问题大了，唉，没办法接着下吧。今天晚上估计又要很晚了。不如意十有八九啊！<IMG height=19 src="http://www.blogjava.net/Emoticons/sad_smile.gif" width=19 border=0>，不说了，赶快写好方案步骤，去了就快做，希望不要出现意外了，这个系统已经折腾很久了，每次做的时候总会出现一些个么蛾子的问题，让人措手不急。<img src ="http://www.blogjava.net/kebo/aggbug/27112.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kebo/" target="_blank">kebo</a> 2006-01-08 09:33 <a href="http://www.blogjava.net/kebo/archive/2006/01/08/27112.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>