【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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 執行計劃-1:獲取執行計劃
- 獲取執行計劃之Autotrace
- mysql調優之——執行計劃explainMySqlAI
- 【執行計劃】Oracle獲取執行計劃的幾種方法Oracle
- Oracle調優之看懂Oracle執行計劃Oracle
- Oracle sql執行計劃OracleSQL
- 分析執行計劃優化SQLORACLE的執行計劃(轉)優化SQLOracle
- 獲取oracle sql語句詳細些執行計劃OracleSQL
- 微課sql最佳化(9)、如何獲取執行計劃SQL
- 達夢資料庫獲取SQL真實的執行計劃資料庫SQL
- MySQL調優篇 | EXPLAIN執行計劃解讀(4)MySqlAI
- 如何檢視SQL的執行計劃SQL
- MySQL執行計劃MySql
- SYBASE執行計劃
- MySQL 執行計劃MySql
- SQL優化案例-從執行計劃定位SQL問題(三)SQL優化
- .Oracle固定執行計劃之SQL PROFILE概要檔案OracleSQL
- 十六、Mysql之Explain執行計劃MySqlAI
- 使用sql monitor獲取更加詳細的執行計劃 - dbms_sqltune.report_sql_monitorSQL
- Oracle SQL Profile固定執行計劃的方法OracleSQL
- MySQL執行計劃解析MySql
- mysql explain 執行計劃MySqlAI
- explain執行計劃分析AI
- mysql執行計劃explainMySqlAI
- oracle 固定執行計劃Oracle
- 執行計劃執行步驟原則
- MongoDb學習之Explain執行計劃MongoDBAI
- Oracle優化案例-從執行計劃定位SQL問題(三)Oracle優化SQL
- 【PG執行計劃】Postgresql資料庫執行計劃統計資訊簡述SQL資料庫
- MySQL——通過EXPLAIN分析SQL的執行計劃MySqlAI
- mongodb執行計劃解釋MongoDB
- 檢視 OceanBase 執行計劃
- MySQL執行計劃解析(四)MySql
- 讀懂MySQL執行計劃MySql
- Explain執行計劃詳解AI
- PostgreSQL執行計劃變化SQL
- explain 查詢執行計劃AI
- 【MySQL】MySQL的執行計劃及索引優化MySql索引優化
- MySQL 5.7 優化不能只看執行計劃MySql優化