Oracle 查看執行計划


Oracle 如何查看執行計划

一. 查看方式

1.1. explain plan

先使用explain plan命令對目標SQL做explain,在使用"select * from table(dbms_xplan.display)"查看上述使用explain plan命令后得到的執行計划。
PL/SQL Developer中的快捷鍵F5就是在explain plan命令上的一層封裝。

explain plan for + SQL
select * from table(dbms_xplan.display)

1.2. DBMS_XPLAN

#配合explain plan使用
select * from table(dbms_xplan.display);

#查看剛剛執行過的SQL的執行計划
select * from table(dbms_xplan.display_cursor(null,null,'advanced'));

#只要目標SQL的執行計划所在的Child Cursor沒有被age out出Shared Pool
select sql_text,sql_id,hash_value,child_number from v$sql where sql_text like '%select * from emp%';
#用於查看指定SQL的執行計划
select * from table(dbms_xplan.display_cursor('sql_id/hash_value',child_cursor_number, 'advanced'));


#VERSION_COUNT代表有幾種不同的執行計划
select sql_text,sql_id,hash_value,child_number from v$sql where sql_text like '%select * from emp%';
#查看指定SQL的所有歷史執行計划,前提是該SQL的執行計划被采集到AWR Repository中
select * from table(dbms_xplan.display_awr('sql_id'));

1.3. SQLPLUS中的AUTOTRACE

set serverout 
set autotrace {off | on | traceonly}
[explain]
[statistics]

1.4. 10046事件

與之前三種查看執行計划方法不同之處在於,所得到的執行計划中明確顯示了目標SQL實際執行計划中每一個執行步驟所消耗的邏輯讀、物理讀和花費的時間。執行計划與明細資源消耗會寫入此Session所對應的trace文件中,Oracle會在參數USER_DUMP_DEST所代表的目錄下生成這個trace文件。

  • 首先在當前Session中激活10046事件
  • 接着在此Session中執行目標SQL
  • 最后在此Seesion中關閉10046事件
#激活10046事件兩種方法
alter session set events '10046 trace name context forever,level 12'
oradebug event 10046 trace name context forever,level 12

#關閉10046事件兩種方法
alter session set events '10046 trace name conetxt off'
oradebug event 10046 trace name context off

1.5. 10053事件

1.6. AWR報告

1.7. 腳本

二. 真實執行計划

在Oracle數據庫中判斷得到的執行計划是否准確,就是看目標SQL是否被真正執行,真正執行過的SQL所對應的的執行計划就是准的,反之則有可能不准。

  • explian plan命令
  • DBMS_XPLAN包
  • SQLPLUS中的AUTOTRACE開關
  • 10046事件

第一種方法可能不准
第二種方法4種方式中第一個方式可能不准,后三種方式都是准的
Alt text
第三種方法可能不准
第四種方法准確


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM