檢視SQL執行計劃的方法(有待於進一步補充)
首先需要明確檢視執行計劃的目的:(摘自官方文件)
It is important to generate and review execution plans for all of the key SQL statements in your application. Doing so lets you compare the optimizer execution plans of a SQL statement when the statement performed well to the plan when that the statement is not performing well. Having the comparison, along with information such as changes in data volumes, can assist in identifying the cause of performance degradation.
答:第一種方法:explain plan for…,生成指定sql語句的執行計劃,並把執行計劃儲存到使用者指定的表中,供使用者查詢,但不作為真正執行時的執行計劃,因為並沒有儲存在library cache中,得到的執行計劃也不是library cache中的,所以不是真正的執行計劃。
(1)SQL>explain plan for select * from emp
(2)SQL>select * from table(dbms_xplan.display);
第二種方法:SQL trace 和10046事件。檢視trace檔案,跟蹤某個session的活動情況,跟蹤的結果包括生成SQL語句的執行計劃,可以用tkprof工具檢視跟蹤檔案。執行計劃有parse,bind,exec,fetch4個子過程,三個指標比較重要:disk(物理磁碟讀取次數),query(一致性讀),current(當前讀)這3列,調整的目標也是降低這3個統計量。跟蹤會話資訊:
(1)exec dbms_support.start_trace_in_session(sid=>,serial=>,waits=>true,binds=>true),其中的sid和serial可以從v$session中獲取。(2)從v$process中獲取os的pid和oracle的pid.然後SQL>oradebug setospid …; SQL>oradebug setorapid…;
第三種方法:從library cache中獲取,就是真正的執行計劃。其實就是綜合利用了v$sql_plan,v$sql_plan_statics(statics_level引數設為all),v$sql_workarea,v$sql_plan_statics_all這幾張檢視。可以對以上幾張檢視寫查詢,來獲得特定sql語句真正的執行計劃,也可以按照下面的步驟得到真正的執行計劃。
(1) select /*+zhangxm*/ count(*) from table….
(2) Select sql_id from v$sql where sql_text like ‘% zhangxm %’; --得到這個語句的sql_id
(3) Select * from table(dbms_xplan.display_cursor(‘sql_id’,null,’basic’)); --以basic方式查
(4) Select * from table(dbms_xplan.display_cursor(‘sql_id’,null,’typical’));--以typical方式
(5) Select * from table(dbms_xplan.display_cursor(‘sql_id’,null,’all)); --以all方式檢視
看其中的一些列,比如isstats,memstats,allstats:實際花費。A_time:語句執行時真正的花費。
還有一種:select * from table(dbms_xplan.display_awr(‘sql_id’));--呼叫display_awr,傳入sql_id引數。
[@more@]來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24214296/viewspace-1035226/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 檢視SQL的執行計劃方法SQL
- 檢視sql執行計劃方法彙總SQL
- 檢視sql執行計劃SQL
- 檢視執行計劃的方法
- 多種方法檢視Oracle SQL執行計劃OracleSQL
- 如何檢視SQL的執行計劃SQL
- Oracle 檢視SQL的執行計劃OracleSQL
- 檢視SQL執行計劃的幾種常用方法YQSQL
- 檢視Oracle SQL執行計劃方法比較、分析OracleSQL
- oracle檢視執行計劃的方法Oracle
- 【Explain Plan】檢視SQL的執行計劃AISQL
- 使用PL/SQL檢視執行計劃SQL
- 檢視sql執行計劃--set autotraceSQL
- 達夢資料庫SQL執行計劃檢視方法資料庫SQL
- Oracle檢視執行計劃常用方法Oracle
- Oracle檢視正在執行的SQL以及執行計劃分析OracleSQL
- MySQL 5.7 檢視理解SQL執行計劃MySql
- 檢視執行計劃
- 檢視sql 執行計劃的歷史變更SQL
- 根據SQL_ID檢視執行計劃SQL
- 檢視sql執行計劃--set autotrace [final]SQL
- oracle10g 檢視SQL執行計劃OracleSQL
- 透過查詢檢視sql執行計劃SQL
- ORACLE執行計劃的檢視Oracle
- Oracle檢視sql_id 的歷史執行計劃OracleSQL
- oracle實用sql(15)--檢視SQL執行計劃的順序OracleSQL
- 檢視執行計劃(一)
- 檢視執行計劃(二)
- 【檢視】使用V$SQL_PLAN檢視獲取曾經執行過的SQL語句執行計劃SQL
- SQLPLUS檢視oracle sql執行計劃命令SQLOracle
- Oracle檢視執行計劃的命令Oracle
- 【Oracle】如何檢視sql 執行計劃的歷史變更OracleSQL
- 儲存過程中檢視sql執行計劃的方法儲存過程SQL
- Oracle中檢視已執行sql的執行計劃OracleSQL
- [20121212]謹慎使用set autotrace traceonly檢視執行計劃[補充].txt
- Oracle檢視執行計劃(五)Oracle
- Oracle檢視執行計劃(六)Oracle
- Oracle檢視執行計劃(一)Oracle