以前整理過一篇AWR 的說明的文檔:sql
Oracle AWR(Automatic Workload Repository) 說明數據庫
http://blog.csdn.net/tianlesoftware/article/details/4682300工具
從Oracle 10g 開始,Oracle 推出一個工具:AWR(Automatic Workload Repository),並建議用AWR 代替9i 的Statspack。性能
AWR 實質上是一個 Oracle 的內置工具,它採集與性能相關的統計數據,並從那些統計數據中導出性能量度,以跟蹤潛在的問題。spa
AWR的快照由一個MMON的後臺進程及其從進程自動地每小時採集一次。爲了節省空間,在Oracle 10g中快照會保留7天,11g的快照保留8天,超過的會自動刪除,快照頻率和保留時間均可以由用戶修改。.net
AWR 使用幾個表來存儲採集的統計數據,全部的表都存儲在新的名稱爲 SYSAUX 的特定表空間中的SYS模式下,而且以 WRM$_* 和 WRH$_* 的格式命名:blog
(1)WRM$_*類表存儲元數據信息(如檢查的數據庫和採集的快照)進程
(2)WRH$_*類保存實際採集的統計數據。文檔
H 表明「歷史數據 (historical)」而 M 表明「元數據 (metadata)」。get
在這些表上構建了幾種帶前綴 DBA_HIST_ 的視圖,這些視圖能夠用來編寫您本身的性能診斷工具。視圖的名稱直接與表相關;例如,視圖 DBA_HIST_SYSMETRIC_SUMMARY 是在WRH$_SYSMETRIC_SUMMARY 表上構建的。
默認狀況下,對於數據庫自身產生的AWR 報告,會保留7天或8天。
SQL> select dbid, retention fromdba_hist_wr_control;
DBID RETENTION
-------------------------------------------------------------------------------------
879543530 +00008 00:00:00.0
這個是我11g的庫,顯示爲8天,若是是Oracle 10g,則會保留7天。
AWR 快照也能夠從其餘的數據庫中導入,咱們這裏看一下:
SQL> select dbid, retention fromdba_hist_wr_control;
DBID RETENTION
-------------------------------------------------------------------------------
877621333 +40150 00:00:00.0
879543530 +00008 00:00:00.0
若是是從其餘庫導入的快照,在10g之後會保存110年(40150/365),這部分數據不會永久刪除。
--AWR導出腳本:
SQL> @?/rdbms/admin/awrextr.sql
--AWR導入腳本:
SQL> @?/rdbms/admin/awrload.sql
另外一個很重要的緣由,就是有時候自動快照不能自動收集,而手工建立快照又能夠成功,對於這種問題的解決方法就是把以前的快照清空掉。
SQL> select dbid, retention fromdba_hist_wr_control;
DBID RETENTION
---------- --------------------
879543530 +00008 00:00:00.0
SQL> selectmin(snap_id), max(snap_id) from dba_hist_snapshot where dbid = 879543530;
MIN(SNAP_ID)MAX(SNAP_ID)
------------------------
161 176
SQL> execdbms_workload_repository.drop_snapshot_range(161, 176, 879543530)
PL/SQL proceduresuccessfully completed.
SQL> select *from dba_hist_snapshot where dbid = 879543530;
no rows selected
SQL> select dbid, retention fromdba_hist_wr_control;
DBID RETENTION
---------- ---------------------------------------------------------------------
877621333 +40150 00:00:00.0
879543530 +00008 00:00:00.0
SQL> select min(snap_id), max(snap_id)from dba_hist_snapshot where dbid = 877621333;
MIN(SNAP_ID) MAX(SNAP_ID)
------------ ------------
160 192
SQL> execdbms_workload_repository.drop_snapshot_range(160, 170, 877621333)
PL/SQL procedure successfully completed.
SQL> select min(snap_id), max(snap_id) from dba_hist_snapshot where dbid =877621333;
MIN(SNAP_ID) MAX(SNAP_ID)
------------ ------------
171 192
SQL>
刪除成功。
SQL> select dbid, retention fromdba_hist_wr_control;
DBID RETENTION
-------------------------------------------------------------------------------
877621333 +40150 00:00:00.0
879543530 +00008 00:00:00.0
SQL> select min(snap_id), max(snap_id)from dba_hist_snapshot where dbid = 877621333;
MIN(SNAP_ID) MAX(SNAP_ID)
------------ ------------
160 192
SQL> exec dbms_swrf_internal.unregister_database(877621333)
PL/SQL procedure successfully completed.
SQL> select min(snap_id), max(snap_id)from dba_hist_snapshot where dbid = 877621333;
MIN(SNAP_ID) MAX(SNAP_ID)
------------ ------------
SQL> select dbid, retention fromdba_hist_wr_control;
DBID RETENTION
-------------------------------------------------------------------------------
879543530 +00008 00:00:00.0
SQL>
dbms_swrf_internal.unregister_database 會把全部的快照直接幹掉,與咱們上節中的刪除是不一樣的效果。
咱們以前把快照清空了,因此沒有結果:
SQL> select * from dba_hist_snapshotwhere dbid = 879543530;
no rows selected
SQL> executedbms_workload_repository.create_snapshot();
PL/SQL procedure successfully completed.
SQL> executedbms_workload_repository.create_snapshot();
PL/SQL procedure successfully completed.
SQL> executedbms_workload_repository.create_snapshot();
PL/SQL procedure successfully completed.
SQL> executedbms_workload_repository.create_snapshot();
PL/SQL procedure successfully completed.
--如今又有快照了:
SQL> select min(snap_id), max(snap_id)from dba_hist_snapshot where dbid = 879543530;
MIN(SNAP_ID) MAX(SNAP_ID)
------------ ------------
177 180
--刪除快照:
SQL> exec dbms_swrf_internal.unregister_database(879543530)
BEGINdbms_swrf_internal.unregister_database(879543530); END;
*
ERROR at line 1:
ORA-13521: Unregister operation on localDatabase id (879543530) not allowed
ORA-06512: at"SYS.DBMS_SWRF_INTERNAL", line 99
ORA-06512: at line 1
這裏直接提示,dbms_swrf_internal.unregister_database不能對本地的數據庫使用。因此若是本地的數據庫,就只能使用dbms_workload_repository包了。
dbms_workload_repository:
能夠刪除本地和其餘數據庫的快照,能夠選擇不一樣的快照來進行刪除。
dbms_swrf_internal:
只能對其餘數據庫的快照來進行操做,會把整個快照unregister掉。
--------------------------------------------------------------------------------------------
版權全部,文章容許轉載,但必須以連接方式註明源地址,不然追究法律責任!
QQ: 251097186
Skype: tianlesoftware
Email: tianlesoftware@gmail.com
Blog: http://blog.csdn.net/tianlesoftware
Weibo: http://weibo.com/tianlesoftware
Twitter: http://twitter.com/tianlesoftware
Facebook: http://www.facebook.com/tianlesoftware
Linkedin: http://cn.linkedin.com/in/tianlesoftware