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