如今咱們稍微詳細地瞭解一下剛纔所說內容。
1. ash佔用的內存大小
ASH的採集信息保存在內存中,在舊的信息被採樣到AWR中後,可被新採集的信息覆蓋,重啓oracle後該信息被清除。分配給ASH的內存大小能夠查詢到:
SQL> select pool, name, bytes/1024/1024 From v$sgastat where name like '%ASH %';
POOL NAME BYTES/1024/1024
shared pool ASH buffers 2
2. AWR更正
爲了便於描述和理解,在第一部分中,咱們說AWR就是保存ASH中的信息。
其實,AWR記錄的信息不只是ASH,還能夠收集到數據庫運行的各方面統計信息和等待信息,用以診斷分析。
AWR的採樣方式是,以固定的時間間隔爲其全部重要的統計信息和負載信息執行一次採樣,並將採樣信息保存在AWR中。
能夠這樣說:ASH中的信息被保存到了AWR中的視圖wrh$_active_session_history中。ASH是AWR的真子集。
3. mmon進程與mmnl進程
快照由一個稱爲 MMON 的新的後臺進程(及其從進程)以及MMNL後臺進程自動地每隔固定時間採樣一次。咱們先來看一下10g的概念指南中對這兩個新增長的後臺進程的介紹:
* MMON進程負責執行多種和管理相關(manageability-related)的後臺任務,例如:
* 當某個測量值(metrics)超過了預設的限定值(threshold value)後提交警告
* 建立新的 MMON 隸屬進程(MMON slave process)來進行快照(snapshot)
* 捕獲最近修改過的 SQL 對象的統計信息
* MMNL進程負責執行輕量級的且頻率較高的和可管理性相關的後臺任務,例如捕獲會話歷史信息,測量值計算等。
AWR的採樣工做由MMON進程每一個1小時執行一次,ASH信息一樣會被採樣寫出到AWR負載庫中。雖然ASH buffer被設計爲保留1小時的信息,但不少時候這個內存是不夠的,當ASH buffer寫滿後,另一個後臺進程MMNL將會主動將ASH信息寫出。
4. SYSAUX表空間
這些採樣數據都存儲在SYSAUX表空間中,而且以WRM$_* 和 WRH$_*的格式命名。前一種類型存儲元數據信息(如檢查的數據庫和採集的快照),後一種類型保存實際採集的統計數據。
SQL> select table_name from dba_tables where table_name like 'WRM$%';
TABLE_NAME
WRM$_WR_CONTROL
WRM$_SNAP_ERROR
WRM$_SNAPSHOT
WRM$_DATABASE_INSTANCE
WRM$_BASELINE
當SYSAUX表空間滿後,AWR將自動覆蓋掉舊的信息,並在警告日誌中記錄一條相關信息:
ORA-1688: unable to extend table SYS.WRH$_ACTIVE_SESSION_HISTORY partition WRH$_ACTIVE_3533490838_1522 by 128 in tablespace SYSAUX
5. 採樣頻率和保留時間
能夠經過查詢視圖dba_hist_wr_control或(wrm$_wr_control)來查詢AWR的採樣頻率和保留時間。默認爲每1小時採樣一次,採樣信息保留時間爲7天。
SQL> select * from dba_hist_wr_control;
DBID SNAP_INTERVAL RETENTION TOPNSQL
----
1148 +00000 00:1 +00007 00:0 DEFAULT
SQL> select DBID, SNAP_INTERVAL, SNAPINT_NUM, RETENTION from wrm$_wr_control;
DBID SNAP_INTERVAL SNAPINT_NUM RETENTION
1160732652 +00000 01:00:00.0 3600 +00007 00:00:00.0
6. 採樣數據量
因爲數據量巨大,把全部ASH數據寫到磁盤上是不可接受的。通常是在寫到磁盤的時候過濾這個數據,寫出的數據佔採樣數據的10%,寫出時經過direct-path insert完成,儘可能減小日誌生成,從而最小化數據庫性能的影響。
7. 初始化參數statistics_level
AWR的行爲受到參數STATISTICS_LEVEL的影響。這個參數有三個值:
* BASIC:awr統計的計算和衍生值關閉.只收集少許的數據庫統計信息.
* TYPICAL:默認值.只有部分的統計收集.他們表明須要的典型監控oracle數據庫的行爲.
* ALL : 全部可能的統計都被捕捉. 而且有操做系統的一些信息.這個級別的捕捉應該在不多的狀況下,好比你要更多的sql診斷信息的時候才使用.