oracle 10g執行計劃 (轉帖)
發表於:2009.06.30 09:04
分類: oralce資料庫
出處:http://guyuanli.itpub.net/post/37743/486738
---------------------------------------------------------------
oracle10g檢視SQL執行計劃有很多方法:
1.透過PL/SQL開啟SQLWINDOW按F5可以看到執行計劃,但是這裡沒有物理讀等統計資訊
2.使用dbms_xplan包,這裡跟F5差不多,也是沒有一些統計資訊
Oracle9i新引入的包dbms_xplan
Oracle9i新引入的包dbms_xplan。函式display有三個引數:Table_name——執行計劃所存放的表,預設為PLAN_TABLE;STATEMENT_ID——PLAN_TABLE表中的欄位;FORMAT——顯示格式。
SQL> explain plan for
2 select
3 tA.n2,
4 tB.n2
5 from
6 t1 tA,
7 t1 tB
8 where
9 tA.n1 = 15
10 and tB.n1 = tA.n1 11 ;
Explained. SQL> select * from table(dbms_xplan.display);
優點:適合於bind var的SQL。可以直接執行,能夠根據相關資訊排序,顯示介面友好。
3.使用autotrace檢視,可以檢視一些統計資訊
首先執行指令碼
SQL>@D:oracleora92rdbmsadminutlxplan.sql 建立plan_table表
SQL> set autotrace on
SQL> set autotrace traceonly
SQL> select table_name from user_tables;
關於Autotrace幾個常用選項的說明:
SET AUTOTRACE OFF ---------------- 不生成AUTOTRACE 報告,這是預設模式
SET AUTOTRACE ON EXPLAIN ------ AUTOTRACE只顯示最佳化器執行路徑報告
SET AUTOTRACE ON STATISTICS -- 只顯示執行統計資訊
SET AUTOTRACE ON ----------------- 包含執行計劃和統計資訊
SET AUTOTRACE TRACEONLY ------ 同set autotrace on,但是不顯示查詢輸出
已選擇98行。
已用時間: 00: 00: 00.04
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT ptimizer=CHOOSE
1 0 NESTED LOOPS
2 1 NESTED LOOPS (OUTER)
3 2 NESTED LOOPS (OUTER)
4 3 NESTED LOOPS (OUTER)
5 4 NESTED LOOPS (OUTER)
6 5 NESTED LOOPS
7 6 TABLE ACCESS (BY INDEX ROWID) OF 'OBJ$'
8 7 INDEX (RANGE SCAN) OF 'I_OBJ2' (UNIQUE)
9 6 TABLE ACCESS (CLUSTER) OF 'TAB$'
10 9 INDEX (UNIQUE SCAN) OF 'I_OBJ#' (NON-UNIQUE)
11 5 TABLE ACCESS (BY INDEX ROWID) OF 'OBJ$'
12 11 INDEX (UNIQUE SCAN) OF 'I_OBJ1' (UNIQUE)
13 4 INDEX (UNIQUE SCAN) OF 'I_OBJ1' (UNIQUE)
14 3 TABLE ACCESS (CLUSTER) OF 'USER$'
15 14 INDEX (UNIQUE SCAN) OF 'I_USER#' (NON-UNIQUE)
16 2 TABLE ACCESS (CLUSTER) OF 'SEG$'
17 16 INDEX (UNIQUE SCAN) OF 'I_FILE#_BLOCK#' (NON-UNIQUE)
18 1 TABLE ACCESS (CLUSTER) OF 'TS$'
19 18 INDEX (UNIQUE SCAN) OF 'I_TS#' (NON-UNIQUE)
Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
1389 consistent gets
0 physical reads
0 redo size
2528 bytes sent via SQL*Net to client
569 bytes received via SQL*Net from client
8 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
98 rows processed
SQL>
4.使用sql_trace檢視,這個跟3差不多
在pl/sql或者sqlplus中,開啟一個sql_window。
(1)先執行:alter session set sql_trace=true;
(2)再執行你那個返回結果不正確的SQL
(3)再執行:alter session set sql_trace=false;
(4)
馬上登陸到機器上,到$ORACLE_BASE/admin/sid/udump目錄下。找到剛生成的.trc檔案(假設檔名是
1234455.trc)。執行命令:tkprof 1234455.trc
aa.txt。檢視aa.txt檔案。這個檔案裡面有執行計劃。看看執行計劃每一步返回的結果集記錄數是不是正確。
5.透過10053事件來檢視,這裡面可以查到一些關於SQL成本的詳細資訊
在pl/sql或者sqlplus中,開啟一個sql_window。
(1)先執行:Alter session set events’10053 trace name context forever[,level {1/2}]’;
(2)再執行你那個返回結果不正確的SQL
(3)再執行:Alter session set events’10053 trace name context off’;
(4)馬上登陸到10.1.4.10機器上,到$ORACLE_BASE/admin/sid/udump目錄下。找到剛生成的.trc檔案)。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/90618/viewspace-623582/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle的執行計劃居然出錯[轉帖]Oracle
- 檢視oracle執行計劃 - 轉Oracle
- ORACLE中檢視執行計劃(轉)Oracle
- Oracle9i 執行計劃(轉)Oracle
- ORACLE執行計劃Oracle
- ORACLE柱狀圖與執行計劃(轉)Oracle
- 怎樣看懂Oracle的執行計劃[轉]Oracle
- oracle 固定執行計劃Oracle
- Oracle sql執行計劃OracleSQL
- oracle sqlprofile 固定執行計劃,並遷移執行計劃OracleSQL
- 分析執行計劃優化SQLORACLE的執行計劃(轉)優化SQLOracle
- 【執行計劃】Oracle獲取執行計劃的幾種方法Oracle
- 【Oracle】-【索引-HINT,執行計劃】-帶HINT的索引執行計劃Oracle索引
- 分析執行計劃最佳化SQLORACLE的執行計劃(轉)SQLOracle
- Oracle執行計劃詳解Oracle
- oracle固定執行計劃--sqlprofileOracleSQL
- Oracle 索引和執行計劃Oracle索引
- Oracle閱讀執行計劃Oracle
- oracle執行計劃相關Oracle
- oracle 執行計劃變更Oracle
- 【優化】Oracle 執行計劃優化Oracle
- oracle 執行計劃設定Oracle
- 10G中檢視歷史執行計劃資訊
- Oracle-繫結執行計劃Oracle
- 【SPM】Oracle如何固定執行計劃Oracle
- Oracle檢視執行計劃(五)Oracle
- Oracle檢視執行計劃(六)Oracle
- Oracle檢視執行計劃(一)Oracle
- Oracle檢視執行計劃(二)Oracle
- Oracle檢視執行計劃(三)Oracle
- Oracle檢視執行計劃(四)Oracle
- 看懂Oracle中的執行計劃Oracle
- ORACLE執行計劃的介紹Oracle
- ORACLE執行計劃 explain說明OracleAI
- ORACLE:什麼是執行計劃Oracle
- ORACLE執行計劃的檢視Oracle
- oracle分割槽表執行計劃Oracle
- oracle中開啟執行計劃Oracle