For investors
股價:
5.36 美元 %For investors
股價:
5.36 美元 %認(rèn)真做教育 專心促就業(yè)
在軟件性能測試過程中,如果我們僅僅對應(yīng)用服務(wù)器和數(shù)據(jù)庫服務(wù)器資源進(jìn)行了監(jiān)控,就會經(jīng)常有這樣的疑問:資源使用不緊張為何事務(wù)響應(yīng)時間這么長?數(shù)據(jù)庫性能怎么樣?哪些sql最耗時?哪些事件在等待?為了獲取更多的Oracle性能,Oracle自帶的awr工具為我們提供了很好的解決方案。
一、AWR工具簡單介紹
AWR 實(shí)質(zhì)上是一個 Oracle 的內(nèi)置工具,它采集與性能相關(guān)的統(tǒng)計(jì)數(shù)據(jù),并從那些統(tǒng)計(jì)數(shù)據(jù)中導(dǎo)出性能量度,以跟蹤潛在的問題。也就是說可以收集到數(shù)據(jù)庫運(yùn)行的各方面統(tǒng)計(jì)信息和等待信息,用以診斷分析,作為一段時期內(nèi)數(shù)據(jù)庫性能調(diào)整的參考。
AWR的采樣方式默認(rèn)以固定的時間間隔為其所有重要的統(tǒng)計(jì)信息和負(fù)載信息執(zhí)行一次采樣,并將采樣信息保存在AWR中。AWR采用默認(rèn)策略是每小時對v$active_session_history進(jìn)行采樣一次,并將信息保存到磁盤中,并且保留7天,7天后舊的記錄才會被覆蓋。這些采樣信息被保存在視圖 wrh$_active_session_history中,而這個采樣頻率(1小時)和保留時間(7天)是可以根據(jù)實(shí)際情況進(jìn)行調(diào)整的,除了采用命令方式設(shè)定采樣頻率外Oracle也可以通過執(zhí)行命令方式來發(fā)出采集請求,這就為執(zhí)行性能測試時主動采集性能數(shù)據(jù)提供了方便??煺沼梢粋€稱為 MMON 的新的后臺進(jìn)程(及其從進(jìn)程)以及MMNL后臺進(jìn)程自動地每隔固定時間采樣一次,我們先來看一下10g的概念指南中對這兩個新增加的后臺進(jìn)程的介紹:
MMON:Manageability Monitor的簡寫。MMON進(jìn)程負(fù)責(zé)執(zhí)行多種和管理相關(guān)(manageability-related)的后臺任務(wù)。例如:
1)當(dāng)某個測量值(metrics)超過了預(yù)設(shè)的限定值(threshold value)后提交警告
2)創(chuàng)建新的 MMON 隸屬進(jìn)程(MMON slave process)來進(jìn)行快照(snapshot)
3)捕獲最近修改過的 SQL 對象的統(tǒng)計(jì)信息
MMNL::Manageability Monitor Light的簡寫。MMNL進(jìn)程負(fù)責(zé)執(zhí)行輕量級的且頻率較高的和可管理性相關(guān)的后臺任務(wù),例如捕獲會話歷史信息,測量值計(jì)算等。如果MMON進(jìn)程沒有按照必要的頻繁程度將ASH數(shù)據(jù)寫至AWR,那么MMNL后臺進(jìn)程就負(fù)責(zé)完成這個工作。
二、AWR報(bào)告內(nèi)容包含什么內(nèi)容
AWR報(bào)告包含等待事件段,Load Profile段,實(shí)例效率統(tǒng)計(jì)段,Shared Pool統(tǒng)計(jì)段,Cache Size段,其中最重要的是等待事件段,它告訴我們在性能測試時間內(nèi)數(shù)據(jù)庫遇到哪些性能瓶頸,它們將是性能調(diào)整或問題診斷的主要候選對象。以下為AWR報(bào)告主要包含的內(nèi)容。
Report summary
Wait events statistics
SQL statistics
Instance activity statistics
I/O statistics
Buffer pool statistics
Advisory statistics
Wait statistics
Undo statistics
Latch statistics
Segment statistics
Dictionary cache statistics
Library cache statistics
SGA statisics
Resource limit statistics
init.ora parameters
三、如何生成AWR
AWR當(dāng)然可以由Oracle自動產(chǎn)生,但是也可以通過DBMS_WORKLOAD_REPOSITORY包來手工創(chuàng)建、刪除和修改,也可以使用desc命令查看該包中的過程。
下面介紹一下awr相關(guān)的一些常用操作命令:
1、手工創(chuàng)建一個快照snapshot
為了獲取快照可以在SQLPLUS狀態(tài)下運(yùn)行下列語句:
SQL> begin
dbms_workload_repository.create_snapshot();
end;
2、手工刪除指定范圍的快照snapshot
SQL> begin
dbms_workload_repository.drop_snapshot_range(low_snap_id => 388, high_snap_id => 388, dbid => 1483744007);
end;
其中的刪除條件可以通過查詢表wrh$_active_session_history來獲取。
3、修改采集時間和統(tǒng)計(jì)信息保留時間,如將收集間隔時間改為30 分鐘一次。并且保留5天時間(單位都是分鐘):
SQL>exec dbms_workload_repository.modify_snapshot_settings(interval=>30, retention=>5*24*60);
其中interval參數(shù)可以修改AWR信息的采樣頻率,retention設(shè)置的是AWR的保存時間,單位為分鐘。
4、設(shè)置基線,保存這些數(shù)據(jù)主要用于將來的分析和比較。
SQL>exec dbms_workload_repository.create_baseline(start_snap_id => 1003,end_snap_id => 1013, 'apply_interest_1');
5.刪除基線
SQL>exec DBMS_WORKLOAD_REPOSITORY.DROP_BASELINE(baseline_name =>'apply_interest_1', cascade => FALSE);
6.生成報(bào)表
得到任意兩個快照之間的AWR報(bào)告只需要在SQLPLUS狀態(tài)下運(yùn)行下列語句:
@?/rdbms/admin/awrrpt.sql并按下列操作步驟即可完成:
首先, 輸入生成報(bào)告類型。目前AWR提供txt和html兩種格式,需要確認(rèn)生成格式,默認(rèn)是html格式。
選擇快照的天數(shù),確認(rèn)生成AWR報(bào)告的時間范圍。
輸入天數(shù)信息后,AWR生成代碼會將天數(shù)范圍內(nèi)的snapshot鏡像點(diǎn)列出,供輸入選擇。輸入開始snapshot編號和終止snapshot編號,這兩個快照決定了定義的報(bào)表產(chǎn)生的時間間隔。
輸入生成報(bào)告的名稱,報(bào)告寫到用戶指定的目錄和文件下。
上述操作步驟完成后就可以在指定目錄上看到相應(yīng)的報(bào)告文件。
四、AWR報(bào)告在性能測試中的實(shí)踐
為了確保系統(tǒng)穩(wěn)定運(yùn)行的同時,系統(tǒng)運(yùn)行效率能夠滿足業(yè)務(wù)需求,浙江地稅大集中工程辦在系統(tǒng)集成階段就引入了性能測試來評估開發(fā)階段系統(tǒng)的性能狀態(tài),保障系統(tǒng)性能質(zhì)量,避免系統(tǒng)上線運(yùn)行后出現(xiàn)性能故障。在這個項(xiàng)目的性能測試過程中,AWR報(bào)告對于性能測試結(jié)果的分析和性能的提升提供強(qiáng)有力的數(shù)據(jù)保障。以下為稅務(wù)發(fā)票發(fā)售測試用例壓力測試過程中,Loadrunner與AWR報(bào)告配合查找性能瓶頸的示例。
第1步,設(shè)置好性能測試運(yùn)行場景,在性能測試運(yùn)行之前手工創(chuàng)建一個snapshot鏡像點(diǎn),該操作并不影響測試結(jié)果。
第2步,按照設(shè)定的測試場景執(zhí)行200用戶并發(fā)進(jìn)行發(fā)票發(fā)售的壓力測試,測試時間為十分鐘;
第3步,測試結(jié)束后再次手工創(chuàng)建一個snapshot快照。
第4步,生成測試開始和測試結(jié)束兩個快照之間的AWR報(bào)告。
通過分析Loadrunner測試結(jié)果,發(fā)現(xiàn)通過地稅編碼獲取企業(yè)發(fā)票信息事務(wù)的平均響應(yīng)時間為16.479秒,遠(yuǎn)遠(yuǎn)超出了事務(wù)響應(yīng)時間不大于5秒的測試要求,經(jīng)分析發(fā)現(xiàn)耗時最大請求的耗時為通過企業(yè)ID獲取企業(yè)發(fā)票繳銷種類和數(shù)量的請求,進(jìn)一步分析該請求對應(yīng)的time to first buffer結(jié)果,發(fā)現(xiàn)服務(wù)器端的處理時間的消耗很大,網(wǎng)絡(luò)上的消耗時間可以忽略不計(jì),由此可以得出初步的結(jié)論瓶頸出現(xiàn)在服務(wù)器端的處理上。
那這樣的結(jié)果,是應(yīng)用造成的還是數(shù)據(jù)庫造成的呢,配合AWR報(bào)告來看就比較容易得到正確的答案。
將第4步產(chǎn)生的HTML腳本粘貼出來,用IE打開看看,一個指定時間段的完整的數(shù)據(jù)庫性能報(bào)告就展現(xiàn)在我們面前了。下面是部分截圖(其中CPU per Exec(s)為單個sql的cpu耗時):
通過和開發(fā)人員確認(rèn),圖中耗時最長的兩個sql分別是獲取企業(yè)發(fā)票種類和對應(yīng)數(shù)量、獲取企業(yè)基本信息調(diào)用需要的,屬于被多個地方反復(fù)調(diào)用公用存儲過程,需要重點(diǎn)優(yōu)化。隨后經(jīng)過多輪sql優(yōu)化和性能測試配合驗(yàn)證,這兩個sql的執(zhí)行效率有了明顯的提升,整個發(fā)票繳銷的并發(fā)性能結(jié)果也達(dá)到了預(yù)期的測試目標(biāo)。
結(jié)束語:
實(shí)際的AWR報(bào)告分析遠(yuǎn)比上述示例復(fù)雜,本文也僅僅是拋磚引玉,說明手工生成AWR報(bào)告對性能測試過程中Oracle數(shù)據(jù)庫性能分析是一個簡便而實(shí)用的方法??傊?,學(xué)會分析AWR報(bào)告并獲得對自己有用的信息,是性能分析不可或缺的一個方面,如果再能與壓力測試和應(yīng)用服務(wù)的日志結(jié)合分析的話,是能夠分析出一些關(guān)鍵的存在性能問題的SQL,由此再由技術(shù)團(tuán)隊(duì)進(jìn)行優(yōu)化,循序漸進(jìn),不斷改進(jìn)。這篇文章的目的只為介紹 AWR在性能測試過程中的簡單應(yīng)用,只涉及非?;镜囊恍┎僮骱蛢?nèi)容,關(guān)于更完整的內(nèi)容可以參見相關(guān)技術(shù)文檔。
【免責(zé)聲明】本文部分系轉(zhuǎn)載,轉(zhuǎn)載目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點(diǎn)和對其真實(shí)性負(fù)責(zé)。如涉及作品內(nèi)容、版權(quán)和其它問題,請?jiān)?0日內(nèi)與聯(lián)系我們,我們會予以更改或刪除相關(guān)文章,以保證您的權(quán)益!