標籤:
在Oracle資料庫中,有時我們可能會遇到這樣的術語:ASH和AWR,那麼它們是怎樣產生的呢?它們的作用又是什麼呢?本文我們就來介紹這一部分內容。
1.10g之前
使用者的串連將產生會話,當前會話記錄儲存在v$session中;處於等待狀態的會話會被複製一份放在v$session_wait中。當該串連斷開後,其原來的串連資訊在v$session和v$session_wait中就會被刪除。這是10g之前的狀況。
2.v$session_wait_history與ASH
若是一個普通的會話(我是指沒有大量地耗費資源),則對於效能調整來說無足輕重。但若該會話在活動時大量佔用了資源(比如:CPU,記憶體,I/O等),該會話資訊的丟失,將無法評測當時的系統瓶頸究竟是什麼。令DBA高興的是,Oracle 10g中保留下了v$session_wait中的這些資訊。
在Oracle 10g中新出現了一個視圖:v$session_wait_history。這個視圖儲存了每個活動session在v$session_wait中最近10次的等待事件。但這對於一段時期內的資料庫效能狀況的監測是遠遠不夠的,為瞭解決這個問題,在10g中還新添加了一個視圖:v$active_session_history。這就是ASH(active session history)。
典型的情況下,為了診斷當前資料庫的狀態,需要最近的五到十分鐘的詳細資料。然而,由於記錄session的活動資訊是很費時間和空間的,ASH採用的策略是:儲存處於等待狀態的活動session的資訊,每秒從v$session_wait中採樣一次,並將採樣資訊儲存在記憶體中。
3.AWR
注意,ASH的採樣資料是儲存在記憶體中。而分配給ASH的記憶體空間是有限的,當所分配空間佔滿後,舊的記錄就會被覆蓋掉;而且資料庫重啟後,所有的這些ASH資訊都會消失。這樣,對於長期檢測oracle的效能是不可能的。在Oracle10g中,提供了持續保留ASH資訊的方法,這就是AWR(auto workload repository)。
由於全部儲存ASH中的資訊是非常耗費時間和空間的,AWR採用的策略是:每小時對v$active_session_history進行採樣一次,並將資訊儲存到磁碟中,並且保留7天,7天后舊的記錄才會被覆蓋。這些採樣資訊被儲存在視圖wrh$_active_session_history中。而這個採樣頻率(1小時)和保留時間(7天)是可以根據實際情況進行調整的,這就給DBA們提供了更加有效系統監測工具。
AWR永久地儲存系統的效能診斷資訊,由SYS使用者擁有。一段時間後,你可能想清除掉這些資訊;有時候為了效能診斷,你可能需要自己定義採樣頻率來擷取系統快照資訊。Oracle 10g在包dbms_workload_repository中提供了很多過程,通過這些過程,你可以管理快照並設定基準(baselines)。
4.小結
這樣,我們就知道了ASH和AWR產生的原因和功能。ASH儲存了系統最新的處於等待的會話記錄,可以用來診斷資料庫的目前狀態;而AWR中的資訊最長可能有1小時的延遲,所以其採樣資訊並不能用於診斷資料庫的目前狀態,但可以用來作為一段時期內資料庫效能調整的參考。
對於這些視圖間的繼承關係,eygle給出了一個關係圖:
圖1 各個視圖的層次
其中視圖dba_hist_active_sess_history是wrh$_active_session_history和其他幾個視圖的聯合展現,通常通過這個視圖進行曆史資料的訪問。
上面我們介紹了Oracle資料庫ASH和AWR的簡單介紹,接下來詳細介紹一下AWR的組成以及它的工作原理
1.ash佔用的記憶體大小
ASH的採集資訊儲存在記憶體中,在舊的資訊被採樣到AWR中後,可被新採集的資訊覆蓋,重啟oracle後該資訊被清除。分配給ASH的記憶體大小可以查詢到:
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$_*的格式命名。前一種類型儲存中繼資料資訊(如檢查的資料庫和採集的快照),後一種類型儲存實際採集的統計資料。
當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天。
6.採樣資料量
由於資料量巨大,把所有ASH資料寫到磁碟上是不可接受的。一般是在寫到磁碟的時候過濾這個資料,寫出的資料占採樣資料的10%,寫出時通過direct-path insert完成,盡量減少日誌產生,從而最小化資料庫效能的影響。
7.初始化參數statistics_level
AWR的行為受到參數STATISTICS_LEVEL的影響。這個參數有三個值:
BASIC:awr統計的計算和衍生值關閉.只收集少量的資料庫統計資訊。
TYPICAL:預設值.只有部分的統計收集.他們代表需要的典型監控oracle資料庫的行為。
ALL:所有可能的統計都被捕捉. 並且有作業系統的一些資訊.這個層級的捕捉應該在很少的情況下,比如你要更多的sql診斷資訊的時候才使用。
關於Oracle資料庫AWR的組成以及它的工作原理的知識就介紹到這裡了,希望本次的介紹能夠對您有所協助。
本文轉自:
http://database.51cto.com/art/201108/282827.htm
http://database.51cto.com/art/201108/282856.htm
[轉]Oracle資料庫ASH和AWR的簡單介紹