【sql調優之執行計劃】獲取執行計劃
從sql開發進階到開發高效的sql需要對oracle對sql的解析執行有一些瞭解。先看看如何獲得執行計劃。
要使用執行計劃需要先執行指令碼:$ORACLE_HOME/rdbms/admin/utlxplan.sql
這個指令碼會建立一個plan_table表,簡單看看這個表的結構:
SQL> desc plan_table
Name Type Nullable Default Comments
--------------- ------------- -------- ------- --------
STATEMENT_ID VARCHAR2(30) Y --語句id
TIMESTAMP DATE Y --時間戳
REMARKS VARCHAR2(80) Y
OPERATION VARCHAR2(30) Y --操作名稱
OPTIONS VARCHAR2(30) Y --選項
OBJECT_NODE VARCHAR2(128) Y --物件節點
OBJECT_OWNER VARCHAR2(30) Y --物件所有者
OBJECT_NAME VARCHAR2(30) Y --物件名稱
OBJECT_INSTANCE INTEGER Y --物件例項
OBJECT_TYPE VARCHAR2(30) Y --物件型別
OPTIMIZER VARCHAR2(255) Y --優化器模式
SEARCH_COLUMNS NUMBER Y --查詢列
ID INTEGER Y --當前id
PARENT_ID INTEGER Y --父id
POSITION INTEGER Y --位置id
COST INTEGER Y --開銷
CARDINALITY INTEGER Y -- 基數
BYTES INTEGER Y --位元組數
OTHER_TAG VARCHAR2(255) Y
PARTITION_START VARCHAR2(255) Y --分割槽開始
PARTITION_STOP VARCHAR2(255) Y --分割槽結束
PARTITION_ID INTEGER Y --分割槽id
OTHER LONG Y
DISTRIBUTION VARCHAR2(30) Y -- 分發
CPU_COST INTEGER Y --cpu開銷
IO_COST INTEGER Y --io開銷
TEMP_SPACE INTEGER Y
看看幾個重要欄位的具體值:
SQL> select a.operation,
2 a.object_name,
3 a.cost,
4 a.cardinality cd,
5 a.bytes bt,
6 a.io_cost io,
7 a.cpu_cost cpu
8 from plan_table a
9 where a.statement_id is null;
OPERATION OBJECT_NAME COST
------------------------------ ------------------------------ ----------
CD BT IO CPU
---------- ---------- ---------- ----------
SELECT STATEMENT 3
1 20 3
NESTED LOOPS 3
1 20 3
MERGE JOIN 2
3 42 2
OPERATION OBJECT_NAME COST
------------------------------ ------------------------------ ----------
CD BT IO CPU
---------- ---------- ---------- ----------
TABLE ACCESS T_GROUP_POLICY_PRODUCT 1
2 24 1
INDEX UNI_GROUP_POLICY_PRODUCT 3
3 3
BUFFER 1
2 4 1
OPERATION OBJECT_NAME COST
------------------------------ ------------------------------ ----------
CD BT IO CPU
---------- ---------- ---------- ----------
INDEX PK_T_PERIOD_TYPE 1
2 4 1
TABLE ACCESS T_PRODUCT_LIFE 1
1 6 1
INDEX PK_T_PRODUCT_LIFE
1
9 rows selected.
執行指令碼$ORACLE_HOME/sqlplus/admin/plustrce.sql 可以建立plustrace角色便於管理使用執行計劃的使用者的許可權,可以使用grant plustrace role to xxx來賦予使用者相關的使用許可權。
可以使用explain plan for 來獲得執行計劃,然後查詢plan_table(如前面的查詢語句)來檢視執行計劃,或者使用dbms_xplan包的display方法,例如:
Select * from table(dbms_xplan.display);
也可以在sqlplus下使用set autotrace on/traceonly等語句,除了或者執行計劃以外,還可以檢視到執行統計資訊,同時也可以在trace檔案中查詢相關的執行計劃(結合使用tkprof,後續詳述)。
可以通過查詢系統檢視來獲得執行計劃,例如:
SQL> select a.ADDRESS,a.HASH_VALUE,a.OPERATION,a.COST from v$sql_plan a where rownum = 1;
ADDRESS HASH_VALUE OPERATION COST
---------------- ---------- -----------------------------
07000004BFF2D0D0 3606577152 UPDATE STATEMENT 1
可以使用alter session/system set sql_trace=true/false;來開啟關閉sql追蹤,而在trace檔案中獲得執行計劃。例如:
SQL> alter session set sql_trace=true;
Session altered.
SQL> alter session set sql_trace=false;
Session altered.
SQL>
也可以從statspack等工具的使用來獲得。(後續詳述)
或者使用一些工具,例如toad,plsql dev來獲得,其原理還是查詢相關的表或者系統檢視。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16179598/viewspace-671082/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 獲取SQL執行計劃SQL
- 執行計劃-1:獲取執行計劃
- 【sql調優之執行計劃】sort operationsSQL
- 【sql調優之執行計劃】estimator iSQL
- 【sql調優之執行計劃】hash joinSQL
- 獲取執行計劃之Autotrace
- 【sql調優之執行計劃】query transformerSQLORM
- 【sql調優之執行計劃】temp table transformationSQLORM
- Oracle 獲取SQL執行計劃方法OracleSQL
- 獲取SQL執行計劃的方式:SQL
- mysql調優之——執行計劃explainMySqlAI
- 【sql調優之執行計劃】in相關的operationSQL
- 【sql調優之執行計劃】merge sort joinSQL
- 【執行計劃】Oracle獲取執行計劃的幾種方法Oracle
- Oracle調優之看懂Oracle執行計劃Oracle
- 【sql調優之執行計劃】使用hint(五)Hint for parallelSQLParallel
- 【sql調優之執行計劃】使用hint(四)Hints for JoinSQL
- Oracle中SQL調優(SQL TUNING)之最權威獲取SQL執行計劃大全OracleSQL
- 獲取執行計劃的方法
- MySQL 5.7獲取指定執行緒正在執行SQL的執行計劃資訊MySql執行緒
- sql 執行計劃SQL
- 【sql調優之執行計劃】使用hint(三)Hints for Query TransformationsSQLORM
- 【sql調優之執行計劃】使用hint(二)Hints for Access PathsSQL
- Oracle獲取執行計劃的方法Oracle
- 分析執行計劃優化SQLORACLE的執行計劃(轉)優化SQLOracle
- 【sql調優之執行計劃】使用hint(六) append and noappendSQLAPP
- 【sql調優之執行計劃】merge join cartesian and buffer sortSQL
- Oracle sql執行計劃OracleSQL
- SQL Server執行計劃SQLServer
- SQL的執行計劃SQL
- SQL執行計劃分析SQL
- sql執行計劃變更和刪除快取中執行計劃的方法SQL快取
- 建立索引調整sql的執行計劃索引SQL
- 獲取oracle sql語句詳細些執行計劃OracleSQL
- oracle dbms_xplan獲取執行計劃Oracle
- 如何獲取真實的執行計劃
- 獲取執行計劃的6種方法
- 控制執行計劃之-SQL Profile(一)SQL