1. 程式人生 > >AWR報告的詳細操作及說明:WHY—為什麼會出現ASH和AWR?

AWR報告的詳細操作及說明:WHY—為什麼會出現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高興的是,oracle10g中保留下了v$session_wait中的這些資訊。 在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和其他幾個檢視的聯合展現,通常通過這個檢視進行歷史資料的訪問。 分享:  

0

喜歡