使用AWR生成一條sql的執行統計報告

我們都知道Oracle的AWR報告是一個很強大的功能通過分析AWR報告可以打出Oracle數據運行過程中出現的問題和可能存在的隱患。但是AWR報告中沒有關於單個SQL執行計劃、統計信息的詳細描述,但不代表AWR不能提供這種功能。

本文介紹的是如何使用AWR報告生成一條sql的詳細執行統計報告。

實驗環境11.2.0.4

1、調整AWR關於SQL收集的設置,調整的目的是因爲默認情況下AWR並非捕獲所有的sql語句,此調整是爲了讓AWR可以收集實驗過程中的SQL語句

zx@ORCL>select * from dba_hist_wr_control;

      DBID SNAP_INTERVAL							       RETENTION								   TOPNSQL
---------- --------------------------------------------------------------------------- --------------------------------------------------------------------------- ------------------------------
1444351641 +00000 01:00:00.0							       +00008 00:00:00.0							   DEFAULT

zx@ORCL>exec dbms_workload_repository.modify_snapshot_settingS(topnsql=>'MAXIMUM');

PL/SQL procedure successfully completed.

zx@ORCL>select * from dba_hist_wr_control;

      DBID SNAP_INTERVAL							       RETENTION								   TOPNSQL
---------- --------------------------------------------------------------------------- --------------------------------------------------------------------------- ------------------------------
1444351641 +00000 01:00:00.0							       +00008 00:00:00.0							   MAXIMUM

2、手工創建一個AWR快照

zx@ORCL>exec dbms_workload_repository.create_snapshot;

PL/SQL procedure successfully completed.

3、創建測試表並在不同情況下執行測試sql,並找到測試sql的sql_id

zx@ORCL>create table t as select * from dba_objects;

Table created.

zx@ORCL>create unique index idx_unique_t on t(object_id);

Index created.

zx@ORCL>exec dbms_stats.gather_table_stats(USER,'T',CASCADE=>TRUE);

PL/SQL procedure successfully completed.

zx@ORCL>select object_name from t where object_id=123;

OBJECT_NAME
------------------------------
ECOL$

zx@ORCL>select sql_id,sql_text from v$sql where sql_text='select object_name from t where object_id=123';

SQL_ID					SQL_TEXT
-------------------                     -----------------------------------------------
2dymmcx3kf7h1				select object_name from t where object_id=123

4、再次手工生成AWR快照

zx@ORCL>exec dbms_workload_repository.create_snapshot;

PL/SQL procedure successfully completed.

5、使用awrsqrpt.sql腳本生成對於sql_id=2dymmcx3kf7h1的sql的詳細統計信息。過程與生成awrrpt類似,不同的是需要指定要生成報告的sql_id

zx@ORCL>@?/rdbms/admin/awrsqrpt

Current Instance
~~~~~~~~~~~~~~~~

   DB Id    DB Name	 Inst Num Instance
----------- ------------ -------- ------------
 1444351641 ORCL		1 orcl


Specify the Report Type
~~~~~~~~~~~~~~~~~~~~~~~
Would you like an HTML report, or a plain text report?
Enter 'html' for an HTML report, or 'text' for plain text
Defaults to 'html'
Enter value for report_type: text

Type Specified: 				 text


Instances in this Workload Repository schema
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

   DB Id     Inst Num DB Name	   Instance	Host
------------ -------- ------------ ------------ ------------
* 1444351641	    1 ORCL	   orcl 	rhel6

Using 1444351641 for database Id
Using	       1 for instance number


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 <return> without
specifying a number lists all completed snapshots.


Enter value for num_days: 1

Listing the last day's Completed Snapshots

							Snap
Instance     DB Name	    Snap Id    Snap Started    Level
------------ ------------ --------- ------------------ -----
orcl	     ORCL		826 15 Feb 2017 09:25	   1
				827 15 Feb 2017 10:00	   1
				828 15 Feb 2017 10:00	   1
				829 15 Feb 2017 10:04	   1
				830 15 Feb 2017 10:09	   1
				831 15 Feb 2017 11:00	   1
				832 15 Feb 2017 11:02	   1
				833 15 Feb 2017 11:07	   1



Specify the Begin and End Snapshot Ids
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Enter value for begin_snap: 832
Begin Snapshot Id specified: 832

Enter value for end_snap: 833
End   Snapshot Id specified: 833




Specify the SQL Id
~~~~~~~~~~~~~~~~~~
Enter value for sql_id: 2dymmcx3kf7h1
SQL ID specified:  2dymmcx3kf7h1

Specify the Report Name
~~~~~~~~~~~~~~~~~~~~~~~
The default report file name is awrsqlrpt_1_832_833.txt.  To use this name,
press <return> to continue, otherwise enter an alternative.

Enter value for report_name: 

Using the report name awrsqlrpt_1_832_833.txt


WORKLOAD REPOSITORY SQL Report

Snapshot Period Summary

DB Name 	DB Id	 Instance     Inst Num Startup Time    Release	   RAC
------------ ----------- ------------ -------- --------------- ----------- ---
ORCL	      1444351641 orcl		     1 15-Feb-17 09:14 11.2.0.4.0  NO

	      Snap Id	   Snap Time	  Sessions Curs/Sess
	    --------- ------------------- -------- ---------
Begin Snap:	  832 15-Feb-17 11:02:01	27	 1.3
  End Snap:	  833 15-Feb-17 11:07:24	29	 1.5
   Elapsed:		   5.38 (mins)
   DB Time:		   0.06 (mins)

SQL Summary				    DB/Inst: ORCL/orcl	Snaps: 832-833

		Elapsed
   SQL Id      Time (ms)
------------- ----------
2dymmcx3kf7h1	       1
Module: SQL*Plus
select object_name from t where object_id=123

	  -------------------------------------------------------------

SQL ID: 2dymmcx3kf7h1			    DB/Inst: ORCL/orcl	Snaps: 832-833
-> 1st Capture and Last Capture Snap IDs
   refer to Snapshot IDs witin the snapshot range
-> select object_name from t where object_id=123

    Plan Hash		Total Elapsed		      1st Capture   Last Capture
#   Value		     Time(ms)	 Executions	  Snap ID	 Snap ID
--- ---------------- ---------------- ------------- ------------- --------------
1   3476657867			    1		  1	      833	     833
	  -------------------------------------------------------------


Plan 1(PHV: 3476657867)
-----------------------

Plan Statistics 			    DB/Inst: ORCL/orcl	Snaps: 832-833
-> % Total DB Time is the Elapsed Time of the SQL statement divided
   into the Total Database Time multiplied by 100

Stat Name				 Statement   Per Execution % Snap
---------------------------------------- ---------- -------------- -------
Elapsed Time (ms)				  1	       0.8     0.0
CPU Time (ms)					  0	       0.0     0.0
Executions					  1	       N/A     N/A
Buffer Gets					  3	       3.0     0.0
Disk Reads					  0	       0.0     0.0
Parse Calls					  1	       1.0     0.1
Rows						  1	       1.0     N/A
User I/O Wait Time (ms) 			  0	       N/A     N/A
Cluster Wait Time (ms)				  0	       N/A     N/A
Application Wait Time (ms)			  0	       N/A     N/A
Concurrency Wait Time (ms)			  0	       N/A     N/A
Invalidations					  0	       N/A     N/A
Version Count					  1	       N/A     N/A
Sharable Mem(KB)				 15	       N/A     N/A
	  -------------------------------------------------------------

Execution Plan
--------------------------------------------------------------------------------------------
| Id  | Operation		    | Name	   | Rows  | Bytes | Cost (%CPU)| Time	   |
--------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT	    |		   |	   |	   |	 2 (100)|	   |
|   1 |  TABLE ACCESS BY INDEX ROWID| T 	   |	 1 |	30 |	 2   (0)| 00:00:01 |
|   2 |   INDEX UNIQUE SCAN	    | IDX_UNIQUE_T |	 1 |	   |	 1   (0)| 00:00:01 |
--------------------------------------------------------------------------------------------



Full SQL Text

SQL ID	     SQL Text
------------ -----------------------------------------------------------------
2dymmcx3kf7h select object_name from t where object_id=123


Report written to awrsqlrpt_1_832_833.txt

報告中列出了AWR記錄中sql執行的統計信息和執行計劃。


參考:http://blog.csdn.net/leshami/article/details/8732708

http://www.linuxidc.com/Linux/2013-01/77196.htm

http://docs.oracle.com/cd/E11882_01/appdev.112/e40758/d_workload_repos.htm#ARPLS69140

《基於Oracle的SQL優化》

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章