DBMS_XPLAN.DISPLAY_CURSOR()看執行計劃
我們可以很容易的得到一個SQL的執行計劃。
如果一個SQL已經執行過了,我們怎麼檢視他真實的執行計劃呢。
如果知道已執行SQL的 SQL_ID,或HASH_VALUE.
在10g中利用DBMS_XPLAN.DISPLAY_CURSOR()可以很方便地查詢到已執行SQL的執行計劃。
SQL> desc dbms_xplan
FUNCTION DISPLAY_CURSOR RETURNS DBMS_XPLAN_TYPE_TABLE
引數名稱 型別 輸入/輸出預設值?
------------------------------ ----------------------- ------ --------
SQL_ID VARCHAR2 IN DEFAULT
CURSOR_CHILD_NO NUMBER(38) IN DEFAULT
FORMAT VARCHAR2 IN DEFAULT
雖然要求入參是SQL_ID。由於SQL_ID和HASH_VALUE本質上是一樣的。
所以這裡用 SQL_ID和HASH_VALUE都可以。
oracle官方文件中的部分說明:
DISPLAY_CURSOR Function
This table function displays the explain plan of any cursor loaded in the cursor cache.
In addition to the explain plan, various plan statistics (such as. I/O, memory and timing)
can be reported (based on the V$SQL_PLAN_STATISTICS_ALL VIEWS).
Syntax
DBMS_XPLAN.DISPLAY_CURSOR(
sql_id IN VARCHAR2 DEFAULT NULL,
child_number IN NUMBER DEFAULT NULL,
format IN VARCHAR2 DEFAULT 'TYPICAL');
--1.執行一個SQL
SELECT /* TOTO */ ename, dname
FROM dept d join emp e USING (deptno);
--2.獲取這個SQL的sql_id和 child_number
SELECT sql_id, child_number
FROM v$sql
WHERE sql_text LIKE '%TOTO%';
SQL_ID CHILD_NUMBER
---------- -----------------------------
gwp663cqh5qbf 0
--3.根據sql_id就可以顯示剛才那個SQL的執行計劃
SELECT * FROM table(DBMS_XPLAN.DISPLAY_CURSOR('gwp663cqh5qbf',0));
--4.顯示出的執行計劃如下
Plan hash value: 3693697075, SQL ID: gwp663cqh5qbf, child number: 0
--------------------------------------------------------
SELECT /* TOTO */ ename, dname
FROM dept d JOIN emp e USING (deptno);
----------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
----------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | | | 7 (100)| |
| 1 | SORT GROUP BY | | 4 | 64 | 7 (43)| 00:00:01 |
|* 2 | HASH JOIN | | 14 | 224 | 6 (34)| 00:00:01 |
| 3 | TABLE ACCESS FULL| DEPT | 4 | 44 | 3 (34)| 00:00:01 |
| 4 | TABLE ACCESS FULL| EMP | 14 | 70 | 3 (34)| 00:00:01 |
----------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
2 - access("E"."DEPTNO"="D"."DEPTNO")
--5.也可以與v$sql關聯,直接查已執行sql的執行計劃。個人還是喜歡第一種方法。
SELECT t.*
FROM v$sql s,
table(DBMS_XPLAN.DISPLAY_CURSOR(s.sql_id, s.child_number)) t
WHERE sql_text LIKE '%TOTO%';
轉自:http://blog.csdn.net/lwei_998/article/details/6049744
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29802484/viewspace-1273063/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle dbms_xplan.display_cursor檢視執行計劃Oracle
- 轉:Oracle中檢視已執行sql的執行計劃---dbms_xplan.display_cursorOracleSQL
- 看執行計劃是否正確
- MySQL 5.7 優化不能只看執行計劃MySql優化
- 執行計劃-1:獲取執行計劃
- 執行計劃
- MySQL Cases-執行計劃向Oracle看齊(FORMAT=tree)MySqlOracleORM
- 分析執行計劃優化SQLORACLE的執行計劃(轉)優化SQLOracle
- oracle sqlprofile 固定執行計劃,並遷移執行計劃OracleSQL
- 【sql調優之執行計劃】獲取執行計劃SQL
- SYBASE執行計劃
- MySQL 執行計劃MySql
- MySQL執行計劃MySql
- sql 執行計劃SQL
- ORACLE執行計劃Oracle
- 【執行計劃】Oracle獲取執行計劃的幾種方法Oracle
- 【Oracle】-【索引-HINT,執行計劃】-帶HINT的索引執行計劃Oracle索引
- 分析執行計劃最佳化SQLORACLE的執行計劃(轉)SQLOracle
- 【PG執行計劃】Postgresql資料庫執行計劃統計資訊簡述SQL資料庫
- oracle 固定執行計劃Oracle
- Oracle sql執行計劃OracleSQL
- explain執行計劃分析AI
- mysql執行計劃explainMySqlAI
- mysql explain 執行計劃MySqlAI
- MySQL執行計劃解析MySql
- 分割槽 執行計劃
- 執行計劃繫結
- SQL Server執行計劃SQLServer
- 執行計劃詳解
- 啟動執行計劃
- SQL的執行計劃SQL
- FAST DUAL執行計劃?AST
- 執行計劃的理解.
- min ? max ? 執行計劃?
- 檢視執行計劃
- SQL執行計劃分析SQL
- 如何看懂執行計劃!
- 閱讀執行計劃