詳談捕獲Oracle SQL語(yǔ)句執(zhí)行計(jì)劃
Oracle經(jīng)過(guò)長(zhǎng)時(shí)間的發(fā)展,很多用戶都很了解捕獲Oracle SQL語(yǔ)句了,這里我發(fā)表一下個(gè)人理解,和大家討論討論。在好多情況下,Oracle自動(dòng)選擇的執(zhí)行計(jì)劃并不是最優(yōu)的,這時(shí)需要我們?nèi)斯とジ深A(yù)。(什么是執(zhí)行計(jì)劃?)
對(duì)SQL調(diào)優(yōu)基本步驟:
a)捕獲Oracle SQL語(yǔ)句
b)產(chǎn)生SQL語(yǔ)句的執(zhí)行計(jì)劃;
c)驗(yàn)證統(tǒng)計(jì)信息(SQL語(yǔ)句涉及到的表格是否做過(guò)分析),表格信息(結(jié)果集的記錄數(shù),索引),字段上面數(shù)據(jù)分布特點(diǎn)
d)通過(guò)手工收集到的信息,形成自己理想的執(zhí)行計(jì)劃。
e)如果做過(guò)分析,則重新分析相關(guān)表格或者做柱狀圖分析。
f)如果沒(méi)有做過(guò)分析,則通過(guò)嘗試不同的Hint,從而獲得合適的執(zhí)行計(jì)劃。
g)當(dāng)我們正常無(wú)法調(diào)優(yōu)到位時(shí),可以打開(kāi)10053事件打開(kāi)優(yōu)化器的跟蹤,看看Oracle如何選擇的.
如何捕獲Oracle SQL語(yǔ)句
捕獲Oracle SQL語(yǔ)句的方法有如下幾種:
1.SQL TRACE或10046跟蹤某個(gè)模塊。
2.PERFSTAT性能統(tǒng)計(jì)包,使用方法見(jiàn)附錄二。
3.V$SQL,V$SESSION_WAIT,V$SQL_TEXT
如何查看執(zhí)行計(jì)劃
查看SQL語(yǔ)句的執(zhí)行計(jì)劃有以下幾種:
1.Set autotrace on(set autotrace traceonly exp)
2.Explain plan for …..@?/rdbms/admin/utlxpls.sql
3.V$SQL_PLAN視圖
◆column operation format a16
◆column "Query Plan" format a60
◆column options format a15
◆column object_nameformat a20
◆column idformat 99
- select id,lpad(' ',2*(level-1))||operation||' '||options||' '||object_name||' '
- ||decode(id,0,'Cost = '||position) "Query Plan"
- from (select *
- from v$sql_plan
- where address='&a') sql_plan
- start with id = 0
- connect by prior id = parent_id
4.第三方工具,如pl/sql developer,TOAD,以上介紹捕獲Oracle SQL語(yǔ)句。
【編輯推薦】