? ? ?在數據庫運維過程中,大家都會利用數據庫提供的各種工具來找到數據庫存在的問題,以便對癥實施配置優化,我是因工作需要,最近開始了解達夢數據庫DM8的故障分析工具,這里發現AWR報告是一款不錯的自帶工具,故而把相關內容梳理出來,便于日后查閱回憶查閱。
一、配置AWR報告生成的步驟。
? ? ? ?AWR報告并不是默認開啟的,因其對數據庫服務器的性能是有較大影響的,所以只有在你需要的時候才開啟,平時一般是沒有開啟的。同時為了幫助準確分析問題,建議選擇性能影響最大的兩個時間點間生成AWR報告,避免關鍵指標被平均?影響你對故障的分析,故而首先就是需要掌握如何生成報告,下面是報告的生成具體步驟。
1、初始化AWR快照包?。通過調用sp_init_awr_sys(1);? 該存儲過程完成初始化操作,其中參數值為1表示初始化 ,為0表示去掉初始化,即停止AWR報告生成。?初始化之后,可通過SELECT SF_CHECK_AWR_SYS;?快速查看狀態,以驗證初始化是否正常,1為正常(如下圖)。
2、設置時間間隔。 AWR報告是需要通過不同時間節點進行對比分析來查找故障原因的,所以接下來設置時間間隔的方法是調用 dbms_workload_repository.awr_set_interval(10);這樣的系統過程,其中10表示的是10分鐘,系統默認是60分鐘,你可以根據需要設置。
3、手動生成快照。可通過調用系統存儲過程?dbms_workload_repository.create_snapshot();快照,若參數為空或設置為'TYPICAL' 表示僅刷新部分數據,若參數為'ALL'表示將全部歷史數據保存下來,該值會影響快照生成數據的大小,一般參數為空就可以。
4、查看快照。 通過下面SQL語句可以查看系統生成快照情況,如下圖所示 SELECT * from sys.WRM$_SNAPSHOT;
5、生成AWR報告。當快照有兩份或多份的時候,就可以通過調下這個系統包生成awr報告。sys.awr_report_html(1,2,'/dmdbms','1.html');其中前兩個參數表示開始和結束的快照ID號,即第4步查詢到snap_id,第三個參數表示awr報告輸出目錄,第四參數是AWR報告文件名。同時該過程生成是HTML格式的報告,還可調用AWR_REPORT_TEXT生成TEXT格式的報告等,參數類似。?也可以用如下的函數直接在SQL中查看報告,但我比較喜歡第一種HTML格式,?SELECT * FROM TABLE (DBMS_WORKLOAD_REPOSITORY.AWR_REPORT_HTML(1,2))。
至此報告生成完成了,就可以調用call sp_init_awr_sys(0);過程,關閉快照生成,至此系統中的快照就會刪除,第4步的查詢快照就會報錯了,但系統的性能會恢復正常,你就可以開始分析報告了。
二、對AWR報告進行分析
? ? ? ? AWR報告分析,涉及內容很多,是一個不斷實踐不斷總結提升的過程,在此把一些常見的分析內容放在這里,隨著工作經驗的增加,可能這里的內容會越來越多,希望與有興趣的同事交流提升。
1、數據庫負載分析。在下圖的指標項中,可分析數據庫負載分析,即DB TIME/(Elapsed*CPUS)可了解數據庫負責情況,一般認為大于80%時,表明數據庫存在性能問題,此時需要分析TOP的等待事件,或SQL ORDER By Elapsed Time大量數據排序消耗時間。
2、硬解析分析。通過下圖可查看到硬解析占比,正常業務系統中硬解析的數量一般應在10%以下,而且占比越少越好,否則就要分析SQL語句是否應該優化了。查看commit提交情況,若非常多可調整buffer區,工作線程量等,因commit提交太多,就是IO寫太高,影響性能。
在下圖中,可重點關注Non-Parse CPU和Execute to Parse兩個指標,查看系統中SQL是否有優化空間,是否是硬解析太多,以便考慮優化SQL寫法,具體如下:
- Non-Parse CPU是表示 SQL實際運行時間/(SQL實際運行時間+SQL解析時間),若該值太低表示解析消耗時間過多,就需要對SQL進行優化,比如注意SQL使用參數化、變量綁定等,還有SQL寫法是否可優化以提升SQL執行計劃命中緩存等,否則太多時間在解析SQL是不利于系統性能的。
- Execute to Parse是指SQL語句執行與分析比例,若SQL重用率高,則這個比例就高,該值越高表示解析后被重復執行的次數越多,這樣就是我們所期望的,因執行是業務有效的使用,而不是在解析SQL。
3、其他相關內容分析。
? ? ? ? 正如前面看到的,還有一些內置的視圖幫助我們查找問題,因實踐經驗不多,在此就只是列出來了,以后有具體應用在補充,同時也方便有需要時查找方便。
A、等待事件。通過可通過下面幾個視圖查看到系統當前狀態下的等待事件情況,V$system_event,V$session_event,V$event_name,v$sessions。
B、內存。通過以下幾個視圖查看當前系統中內存使用情況:?v$buffer,v$bufferpool,v$vpool,v$mem_pool 。
C、鎖。通過v$lock系統視圖查看當前系統中鎖的情況。