利用statspack來獲取生成環境中top SQL及其執行計劃
利用statspack來獲取生成環境中top SQL及其執行計劃
作者:
來源:
在一些特殊情況下,生產環境中top SQL會讓DBA捉摸不定。比如一個由複雜分支條件所生成的動態語句;第三方軟體或者程式碼本身對會話環境進行了修改,導致無法正確重現問題語句的查詢計劃;語句過長導致無法獲取正確的全部語句,等等。這時,我們可以考慮設定statspack為更高階別(預設級別為5),以獲取相關語句的詳細資訊。具體過程如下:
獲取級別6的statspack的快照:
SQL> exec statspack.SNAP(i_snap_level => 6);
N分鐘後….
SQL> exec statspack.SNAP(i_snap_level => 6);
獲取statspack報告
SQL> @?/rdbms/admin/spreport.sql
... …
Specify the number of days of snapshots to choose from
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Entering the number of days (n) will result in the most recent
(n) days of snapshots being listed. Pressing
without specifying a number lists all completed snapshots.
Listing all Completed Snapshots
Snap
Instance DB Name Snap Id Snap Started Level Comment
------------ ------------ --------- ----------------- ----- --------------------
edgar EDGAR 1 28 Dec 2005 15:32 5
11 03 Jan 2006 09:54 5
12 03 Jan 2006 09:54 5
21 11 May 2007 13:33 6
31 11 May 2007 13:34 6
在選取快照時,可以看到我們剛才生成的兩個快照級別為6。
檢視報告,可以看到報告內容比我們普通的statspack報告更加詳細(這些不是本文重點,不做具體解釋)。仔細觀察top SQL部分,你會發現報告中多出了一列“Old Hash Value”,找到你需要的語句,記下它的這個hash值。
CPU CPU per Elapsd Old
Time (s) Executions Exec (s) %Total Time (s) Buffer Gets Hash Value
---------- ------------ ---------- ------ ---------- --------------- ----------
13.51 55 0.25 64.2 13.69 13,528 2547576380
Module: SQL*Plus
select a, b from ttt where b like 'aaa%'
… …
我們用Oracle提供的另一個statspack 報告指令碼來生成這條SQL的報告:
SQL> @?/rdbms/admin/sprepsql.sql
… …
Listing all Completed Snapshots
Snap Snap
Instance DB Name Id Snap Started Level Comment
------------ ------------ --------- ----------------- ----- --------------------
edgar EDGAR 1 28 Dec 2005 15:32 5
11 03 Jan 2006 09:54 5
12 03 Jan 2006 09:54 5
21 11 May 2007 13:33 6
31 11 May 2007 13:34 6
… …
還是選擇剛才的兩個快照:
Specify the Begin and End Snapshot Ids
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Enter value for begin_snap: 21
Begin Snapshot Id specified: 21
Enter value for end_snap: 31
End Snapshot Id specified: 31
這兒要求輸入hash值,把剛才得到的hash值輸入:
Specify the old (i.e. pre-10g) Hash Value
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Enter value for hash_value: 2547576380
生成了SQL報告,看下報告,裡面有SQL的完整語句和它的查詢計劃。
SQL Text
~~~~~~~~
select a, b from ttt where b like 'aaa%'
Plans in shared pool between Begin and End Snap Ids
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Shows the Execution Plans found in the shared pool between the begin and end
snapshots specified. The values for Rows, Bytes and Cost shown below are those
which existed at the time the first-ever snapshot captured this plan - these
values often change over time, and so may not be indicative of current values
-> Rows indicates Cardinality, PHV is Plan Hash Value
-> ordered by Plan Hash Value
--------------------------------------------------------------------------------
| Operation | PHV/Object Name | Rows | Bytes| Cost |
--------------------------------------------------------------------------------
|SELECT STATEMENT | 2 | 60 | | 56 |
| TABLE ACCESS FULL | | 2 | 60 | 56 |
--------------------------------------------------------------------------------
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22578826/viewspace-741702/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 獲取SQL執行計劃SQL
- 【sql調優之執行計劃】獲取執行計劃SQL
- Oracle 獲取SQL執行計劃方法OracleSQL
- 獲取SQL執行計劃的方式:SQL
- 執行計劃-1:獲取執行計劃
- Oracle中SQL調優(SQL TUNING)之最權威獲取SQL執行計劃大全OracleSQL
- MySQL 5.7獲取指定執行緒正在執行SQL的執行計劃資訊MySql執行緒
- 獲取執行計劃之Autotrace
- 獲取執行計劃的方法
- 獲取oracle sql語句詳細些執行計劃OracleSQL
- 【執行計劃】Oracle獲取執行計劃的幾種方法Oracle
- sql執行計劃變更和刪除快取中執行計劃的方法SQL快取
- oracle 9i 獲取sql執行計劃(書寫長的sql)OracleSQL
- 微課sql最佳化(9)、如何獲取執行計劃SQL
- 介紹幾種獲取SQL執行計劃的方法(上)SQL
- Oracle獲取執行計劃的方法Oracle
- 利用SSIS在SQL Azure中執行計劃任務(下)KCSQL
- 利用SSIS在SQL Azure中執行計劃任務(上)DJSQL
- 使用 EXPLAIN PLAN 獲取SQL語句執行計劃 (R0.1)AISQL
- 達夢資料庫獲取SQL真實的執行計劃資料庫SQL
- 用sql profile來固定執行計劃SQL
- oracle dbms_xplan獲取執行計劃Oracle
- 如何獲取真實的執行計劃
- 獲取執行計劃的6種方法
- 通過等待事件來獲得查詢SQl的執行計劃事件SQL
- sql 執行計劃SQL
- Oracle 獲取執行計劃的幾種方法Oracle
- Oracle10g如何獲取執行計劃Oracle
- 使用dbms_xplan包來獲得sql語句的執行計劃SQL
- 利用coe_xfr_sql_profile 改變執行計劃SQL
- 【檢視】使用V$SQL_PLAN檢視獲取曾經執行過的SQL語句執行計劃SQL
- AWR 中 top sql 的資訊獲取 - 分析SQL
- 物化檢視重新整理遞迴SQL獲取執行計劃報錯遞迴SQL
- 如何清除某條SQL在庫快取中的執行計劃SQL快取
- 根據SQL Id獲得SQL語句的執行計劃SQL
- 使用sql monitor獲取更加詳細的執行計劃 - dbms_sqltune.report_sql_monitorSQL
- NOTE: cannot fetch plan for SQL_ID_在plsql developer無法獲取sql執行計劃SQLDeveloper
- 生成執行計劃的方法