主頁(yè) > 知識(shí)庫(kù) > Oracle中獲取執(zhí)行計(jì)劃的幾種方法分析

Oracle中獲取執(zhí)行計(jì)劃的幾種方法分析

熱門標(biāo)簽:百度地圖標(biāo)注素材 征服眼公司地圖標(biāo)注 開封智能外呼系統(tǒng)廠家 外呼線路外顯本地號(hào)碼 征服者火車站地圖標(biāo)注 人工智能地圖標(biāo)注自己能做嗎 阿爾巴尼亞地圖標(biāo)注app word地圖標(biāo)注方向 美圖秀秀地圖標(biāo)注

1. 預(yù)估執(zhí)行計(jì)劃 - Explain Plan
Explain plan以SQL語(yǔ)句作為輸入,得到這條SQL語(yǔ)句的執(zhí)行計(jì)劃,并將執(zhí)行計(jì)劃輸出存儲(chǔ)到計(jì)劃表中。
首先,在你要執(zhí)行的SQL語(yǔ)句前加explain plan for,此時(shí)將生成的執(zhí)行計(jì)劃存儲(chǔ)到計(jì)劃表中,語(yǔ)句如下:
explain plan for SQL語(yǔ)句
然后,在計(jì)劃表中查詢剛剛生成的執(zhí)行計(jì)劃,語(yǔ)句如下:
select * from table(dbms_xplan.display);
注意:Explain plan只生成執(zhí)行計(jì)劃,并不會(huì)真正執(zhí)行SQL語(yǔ)句,因此產(chǎn)生的執(zhí)行計(jì)劃有可能不準(zhǔn),因?yàn)椋?/FONT>

1)當(dāng)前的環(huán)境可能和執(zhí)行計(jì)劃生成時(shí)的環(huán)境不同;
2)不會(huì)考慮綁定變量的數(shù)據(jù)類型;
3)不進(jìn)行變量窺視。

2. 查詢內(nèi)存中緩存的執(zhí)行計(jì)劃 (dbms_xplan.display_cursor)
如果你想獲取正在執(zhí)行的或剛執(zhí)行結(jié)束的SQL語(yǔ)句真實(shí)的執(zhí)行計(jì)劃(即獲取library cache中的執(zhí)行計(jì)劃),可以到動(dòng)態(tài)性能視圖里查詢。方法如下:

1)獲取SQL語(yǔ)句的游標(biāo)
游標(biāo)分為父游標(biāo)和子游標(biāo),父游標(biāo)由sql_id(或聯(lián)合address和hash_value)字段表示,子游標(biāo)由child_number字段表示。

如果SQL語(yǔ)句正在運(yùn)行,可以從v$session中獲得它的游標(biāo)信息,如:
select status, sql_id, sql_child_number from v$session where status='ACTIVE' and ....

如果知道SQL語(yǔ)句包含某些關(guān)鍵字,可以從v$sql視圖中獲得它的游標(biāo)信息,如:
select sql_id, child_number, sql_text from v$sql where sql_text like '%關(guān)鍵字%‘

2)獲取庫(kù)緩存中的執(zhí)行計(jì)劃
為了獲取緩存庫(kù)中的執(zhí)行計(jì)劃,可以直接查詢動(dòng)態(tài)性能視圖v$sql_plan和v$sql_plan_statistics_all等,但更方便的方法是以sql_id和子游標(biāo)為參數(shù),執(zhí)行如下語(yǔ)句:
select * from table(dbms_xplan.display_cursor('sql_id',child_number));

3)獲取前一次的執(zhí)行計(jì)劃:
set serveroutput off
select * from table(dbms_xplan.display_cursor(null,null,'ALLSTATS LAST'));

3. 查詢歷史執(zhí)行計(jì)劃(dbms_xplan.display_awr)
AWR會(huì)定時(shí)把動(dòng)態(tài)性能視圖中的執(zhí)行計(jì)劃保存到dba_hist_sql_plan視圖中,如果你想要查看歷史執(zhí)行計(jì)劃,可以采用如下方法查詢:
select * from table(dbms_xplan.display_awr('sql_id');

4. 在用sqlplus做SQL開發(fā)是(Autotrace)
set autotrace是sqlplus工具的一個(gè)功能,只能在通過(guò)sqlplus連接的session中使用,它非常適合在開發(fā)時(shí)測(cè)試SQL語(yǔ)句的性能,有以下幾種參數(shù)可供選擇:

SET AUTOTRACE OFF ---------------- 不顯示執(zhí)行計(jì)劃和統(tǒng)計(jì)信息,這是缺省模式
SET AUTOTRACE ON EXPLAIN ------ 只顯示優(yōu)化器執(zhí)行計(jì)劃
SET AUTOTRACE ON STATISTICS -- 只顯示統(tǒng)計(jì)信息
SET AUTOTRACE ON ----------------- 執(zhí)行計(jì)劃和統(tǒng)計(jì)信息同時(shí)顯示
SET AUTOTRACE TRACEONLY ------ 不真正執(zhí)行,只顯示預(yù)期的執(zhí)行計(jì)劃,同explain plan

5. 生成Trace文件查詢?cè)敿?xì)的執(zhí)行計(jì)劃 (SQL_Trace, 10046)
SQL_TRACE作為初始化參數(shù)可以在實(shí)例級(jí)別啟用,也可以只在會(huì)話級(jí)別啟用,在實(shí)例級(jí)別啟用SQL_TRACE會(huì)導(dǎo)致所有進(jìn)程的活動(dòng)被跟蹤,包括后臺(tái)進(jìn)程及所有用戶進(jìn)程,這通常會(huì)導(dǎo)致比較嚴(yán)重的性能問(wèn)題,所以在一般情況下,我們使用sql_trace跟蹤當(dāng)前進(jìn)程,方法如下:

SQL>alter session set sql_trace=true;
...被跟蹤的SQL語(yǔ)句...
SQL>alter session set sql_trace=false;
如果要跟蹤其它進(jìn)程,可以通過(guò)Oracle提供的系統(tǒng)包DBMS_SYSTEM. SET_SQL_TRACE_IN_SESSION來(lái)實(shí)現(xiàn),例如:
SQL> exec dbms_system.set_sql_trace_in_session(sid,serial#,true) --開始跟蹤
SQL> exec dbms_system.set_sql_trace_in_session(sid,serial#,false) --結(jié)束跟蹤

生成trace文件后,再用tkprof 工具將sql trace 生成的跟蹤文件轉(zhuǎn)換成易讀的格式,語(yǔ)法如下:
tkprof inputfile outputfile
10046事件是SQL_TRACE的一個(gè)升級(jí)版,它也是追蹤會(huì)話,生成Trace文件,只是它里面的內(nèi)容更詳細(xì),

您可能感興趣的文章:
  • ORACLE數(shù)據(jù)庫(kù)查看執(zhí)行計(jì)劃的方法
  • Oracle中使用DBMS_XPLAN處理執(zhí)行計(jì)劃詳解
  • 查看Oracle的執(zhí)行計(jì)劃一句話命令
  • Oracle中基于hint的3種執(zhí)行計(jì)劃控制方法詳細(xì)介紹
  • Oracle中直方圖對(duì)執(zhí)行計(jì)劃的影響詳解

標(biāo)簽:孝感 海北 泰安 淮南 葫蘆島 宜春 六安 酒泉

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Oracle中獲取執(zhí)行計(jì)劃的幾種方法分析》,本文關(guān)鍵詞  Oracle,中,獲取,執(zhí)行,計(jì)劃,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Oracle中獲取執(zhí)行計(jì)劃的幾種方法分析》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于Oracle中獲取執(zhí)行計(jì)劃的幾種方法分析的相關(guān)信息資訊供網(wǎng)民參考!
  • 企业400电话

    智能AI客服机器人
    15000

    在线订购

    合计11份范本:公司章程+合伙协议+出资协议+合作协议+股权转让协议+增资扩股协议+股权激励+股东会决议+董事会决议

    推薦文章