[君三思] 2009-10-22 |
一、ASH和AWR的故事1.1 關于ASH我們都知道,用戶在ORACLE數據庫中執行操作時,必然要創建相應的連接和會話,其中,所有當前的會話信息都保存在動態性能視圖V$SESSION中,通過該視圖,DBA可以查看用戶實際執行的操作,或者當前的等待事件等。通常這部分信息是調優過程中的關鍵信息,不過,一旦連接斷開。會話信息就會被同時從V$SESSION及其它相關視圖中清除,也就是說,用戶執行完操作走人,而你(DBA),如果不能在當前逮到他,過了這點,就不知道它曾經做過什么了。 10g 版本中,ORACLE又新增加了一個視圖(其它是若干,不過咱們還是以session為引子說):V$ACTIVE_SESSION_HISTORY,看名字就知道,就是活動會話的歷史記錄,這下,即使用戶操作完成后,斷開了連接也不怕,因為其會話的情況已經被記錄了下來,這項特性就是ASH了,全稱與視圖名相同,正是:ACTIVE SESSION HISTORY。 ASH 每秒鐘收集一次當前處于非空閑等待事件的、活動狀態的、session的信息,并保存在V$ACTIVE_SESSION_HISTORY視圖中,我們(應該以及必須)知道,動態性能視圖其實上是ORACLE自行構造的一堆存在于SGA內存區的虛表,就是說,ASH的數據是保存在內存里的,實際上,ORACLE分配給ASH的空間并不是無限大(更何況ORACLE自身管理的內存空間也不是無限大),查看ASH可供使用的內存空間,可以通過如下SQL: SQL> select pool, name, bytes/1024/1024 Mb From v$sgastat where name like 'ASH %';
POOL NAME Mb ------------ -------------------------- --------------- shared pool ASH buffers 15.5直白的講 ,V$ACTIVE_SESSION_HISTORY中能夠記錄多少會話信息, 一方面取決于該數據庫的SGA 分配給ASH buffers的大小 ,另一方面取決于數據庫的啟動和關閉(重啟數據庫時將重構SGA內存區)。這兩方面的因素制約了V$ACTIVE_SESSION_HISTORY中能夠保存的會話信息的能力,做為DBA,我們肯定是希望ASH盡可能多的保留關于會話的信息,但目前來看單純依靠V$ACTIVE_SESSION_HISTORY肯定無法實現這點,那怎么辦呢?別擔心,ORACLE又提供了AWR特性,ASH收集到的會話信息,是做為AWR中快照信息的一部分,被保存到了硬盤上。 1.2 關于AWRAWR 是 Oracle 10g 版本 推出的新特性, 全稱叫Automatic Workload Repository-自動負載信息庫。 談到這一特性呢,不得不先提Statspack,Statspack稱的上是ORACLE世界里的老人了,不過畢竟年歲大了,腿腳雖然還算靈便,但效率不那么高了,用時髦話講就是不能適應時代發展步伐,不能緊跟時代潮流,不能保持做為一名優秀黨員的先進性,始終堅持帶三個表的為DBA服務。但是,說到底Statspack還是為了黨國事業奮斗了一輩子,在黨內還是有勢力有威信有地位有影響的四有老人,還有余熱可以發揮, 雖然其在統計實時性方面,表現已不足以滿足DBA多變的需求,依然 不能一下就將其拿下, 因此 ORACLE 采取漸進方式先 推出了AWR,說是輔助Statspack工作,其實明眼人一看就明了,這是新指定的接班人哪。 提示: 關于Statspack的學和用請參考三思筆記相關章節: http://www.5ienet.com/note/html/stat/index.shtmlAWR 與前輩Statspack在職業定位方面是相同的,都是負責收集、處理并維護性能統計信息,用于檢查和分析性能問題(甚至生成的報告格式都非常接近),AWR生成的統計數據即可以通過V$視圖和DBA_*數據字典查看,也可以通過腳本來生成相應報表。談到相比Statspack,AWR究竟在哪些方面有所提升呢,撿主要的講就兩條:自動+實時,至于功能上的些許提高,不過是因為AWR年輕腿腳利索罷了。 提示: 進入10g版本,ORACLE更加注重強調使用EM(Enterprise Manager)管理各項操作,不過考慮性能、通用度等各方面因素,這里三思仍然主要通過腳本操作來使用AWR和ASH的各項功能。 |