根據SQL Id獲得SQL語句的執行計劃

kuqlan發表於2011-09-17

對於在生成的AWR報告中被發現的消耗資源較多的SQL語句,根據SQL Id可以使用AWR提供的awrsqrpt.sql(或awrsqrpi.sql指令碼達到獲取SQL語句執行計劃的目的。

以上兩個指令碼的詳細路徑在$ORACLE_HOME/rdbms/admin/目錄下。其中awrsqrpt.sql用於本地預設資料庫,而awrsqrpi.sql不僅可以到處本地預設資料庫所對應的SQL執行計劃,也可以用於AWR資料匯入後異地資料庫SQL執行計劃(用於遠端診斷及分析)。在awrsqrpi.sql中的如下notes說明這一點:

NOTES

Run as SYSDBA. Generally this script should be invoked by awrsqrpt,

unless you want to pick a database other than the default.

[@more@]

顯示SQL執行計劃的方法:

SQL>connect sys/password as sysdba;

SQL> @?/rdbms/admin/awrsqrpt.sql

SQL>connect sys/password as sysdba;

SQL> @?/rdbms/admin/awrsqrpti.sql

後按提示輸入或選擇對應的引數即可。

如果根據SQL執行計劃發現某些列需要建立索引或要判斷SQL中繫結變數的具體值的離散度等,則根據如下SQL可以找到繫結變數的值:

簡單的查詢方法:

select dbms_sqltune.extract_binds(bind_data) from wrh$_sqlstat a where a.sql_id='62q97n1yka8qc'

格式化顯示繫結變數值的SQL

select dbms_sqltune.extract_bind(bind_data, 1).value_string||'-'|| dbms_sqltune.extract_bind(bind_data, 2).value_string ||'-'|| dbms_sqltune.extract_bind(bind_data, 3)

.value_string ||'-'|| dbms_sqltune.extract_bind(bind_data, 4).value_string ||'-'|| dbms_sqltune.extract_bind(bind_data, 5)

.value_string ||'-'|| dbms_sqltune.extract_bind(bind_data, 6).value_string||'-'||dbms_sqltune.extract_bind(bind_data, 7).value_string

from wrh$_sqlstat

where sql_id = '62q97n1yka8qc'

/

以上方法和SQL是Eygle大師那兒學到的。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/18841027/viewspace-1055123/,如需轉載,請註明出處,否則將追究法律責任。

相關文章