張開基
摘 要:oracle數(shù)據(jù)庫(kù)作為目前市場(chǎng)占有率最大的數(shù)據(jù)庫(kù),以其查詢效率高、運(yùn)行安全可靠等優(yōu)點(diǎn)被許多公司采用。數(shù)據(jù)庫(kù)存儲(chǔ)著公司生產(chǎn)經(jīng)營(yíng)的核心數(shù)據(jù),因此安全性、可靠性等要求比較高。保證生產(chǎn)數(shù)據(jù)庫(kù)系統(tǒng)的高效運(yùn)行,從而確保公司核心數(shù)據(jù)的安全穩(wěn)定,是數(shù)據(jù)庫(kù)管理員的職責(zé)。其中,數(shù)據(jù)庫(kù)調(diào)優(yōu)和故障處理是數(shù)據(jù)庫(kù)管理員日常工作的重要部分。本文通過(guò)數(shù)據(jù)庫(kù)性能調(diào)優(yōu)的方法研究與故障的分析排除,闡述了數(shù)據(jù)庫(kù)日常運(yùn)維的重要性。
關(guān)鍵詞:運(yùn)維;性能調(diào)優(yōu);故障排除
1.引言
公司生產(chǎn)數(shù)據(jù)庫(kù)存儲(chǔ)著公司的重要數(shù)據(jù),是公司所有應(yīng)用數(shù)據(jù)的唯一源頭。生產(chǎn)數(shù)據(jù)庫(kù)中存儲(chǔ)的數(shù)據(jù)是公司基礎(chǔ)數(shù)據(jù)的標(biāo)準(zhǔn),是公司領(lǐng)導(dǎo)層進(jìn)行重要決策所需數(shù)據(jù)的唯一來(lái)源。所以,確保生產(chǎn)數(shù)據(jù)庫(kù)的運(yùn)行穩(wěn)定,能夠快速響應(yīng)公司所需數(shù)據(jù)的請(qǐng)求,是數(shù)據(jù)庫(kù)管理員日常工作的重要內(nèi)容。
數(shù)據(jù)庫(kù)管理員的日常巡檢中,應(yīng)全面檢查數(shù)據(jù)庫(kù)服務(wù)器的硬件資源、數(shù)據(jù)庫(kù)運(yùn)行情況等,發(fā)現(xiàn)異常及時(shí)處理,這樣才能最大限度的避免數(shù)據(jù)庫(kù)產(chǎn)生性能問(wèn)題,避免影響生產(chǎn)庫(kù)的正常使用。這就要求管理員,平時(shí)要注意監(jiān)控?cái)?shù)據(jù)庫(kù),防止數(shù)據(jù)庫(kù)產(chǎn)生嚴(yán)重的性能問(wèn)題。當(dāng)數(shù)據(jù)庫(kù)出現(xiàn)性能問(wèn)題時(shí),要積極去解決它,防止出現(xiàn)數(shù)據(jù)丟失、生產(chǎn)庫(kù)死機(jī)等嚴(yán)重事件。本文從數(shù)據(jù)庫(kù)性能調(diào)優(yōu)的常規(guī)手段入手,分析公司數(shù)據(jù)庫(kù)的運(yùn)行情況,查看數(shù)據(jù)庫(kù)的性能狀況,排除可能出現(xiàn)的性能問(wèn)題。然后,針對(duì)數(shù)據(jù)庫(kù)出現(xiàn)的異常狀況,闡述了詳盡的解決過(guò)程。
2. 數(shù)據(jù)庫(kù)運(yùn)行情況分析
2.1 等待事件及AWR概述
Oracle等待事件是衡量oracle性能狀況的重要依據(jù)及指標(biāo)。oracle中有兩種類型的等待事件:空閑等待事件,即oracle正在等待事件的發(fā)生,這種類型的等待事件對(duì)數(shù)據(jù)庫(kù)性能沒(méi)有太大的影響,在日常調(diào)優(yōu)中可以忽略;另一種是非空閑等待事件,即會(huì)話正在等待oracle完成的事件[1]。數(shù)據(jù)庫(kù)出現(xiàn)非空閑等待事件一般表明服務(wù)器資源出現(xiàn)了瓶頸,數(shù)據(jù)庫(kù)發(fā)生了資源競(jìng)爭(zhēng)。如果某個(gè)非空閑等待事件比正常情況下持續(xù)時(shí)間變長(zhǎng),發(fā)生次數(shù)明顯變多,這種情況一般就表示數(shù)據(jù)庫(kù)發(fā)生了性能問(wèn)題。
在數(shù)據(jù)庫(kù)眾多的管理工具中,Oracle提供的運(yùn)行收集工具AWR是一個(gè)很強(qiáng)大的工具,通過(guò)AWR,可以收集系統(tǒng)信息及數(shù)據(jù)庫(kù)運(yùn)行情況信息,可以用來(lái)診斷數(shù)據(jù)庫(kù)故障,也方便第三方技術(shù)支持進(jìn)行遠(yuǎn)程閱讀和建議[2]。通過(guò)AWR可以很容易的確定Oracle數(shù)據(jù)庫(kù)的性能瓶頸所在,因此了解和使用AWR對(duì)于數(shù)據(jù)庫(kù)管理員來(lái)說(shuō)至關(guān)重要。
2.2 AWR報(bào)告分析
為了查看數(shù)據(jù)庫(kù)運(yùn)行情況,我們?cè)跀?shù)據(jù)庫(kù)使用高峰期,提取了一份數(shù)據(jù)庫(kù)AWR報(bào)告。其中,Top 5 Wait Events列出了數(shù)據(jù)庫(kù)耗時(shí)最長(zhǎng)或發(fā)生次數(shù)最多的五個(gè)等待事件,是整個(gè)AWR報(bào)告中最能披露問(wèn)題的一部分內(nèi)容。識(shí)別分析其中的等待事件往往可以幫助解決系統(tǒng)調(diào)整方面的性能問(wèn)題。如果數(shù)據(jù)庫(kù)參數(shù)TIMED_STATISTICS值設(shè)置為true,則等待事件會(huì)按照等待時(shí)間的長(zhǎng)短來(lái)排序;如果沒(méi)有,則會(huì)按照等待事件發(fā)生的次數(shù)來(lái)排序。
通過(guò)分析提取的AWR報(bào)告,前兩位等待事件分別是CPU time、db file sequential read。其中,CPU time排位第一表明數(shù)據(jù)庫(kù)沒(méi)用io或內(nèi)存等硬件瓶頸,如果利用系統(tǒng)命令查看cpu使用率在正常狀態(tài)下,表明數(shù)據(jù)庫(kù)運(yùn)行情況正常。在等待事件排序中它居首,說(shuō)明數(shù)據(jù)庫(kù)運(yùn)行正常,但是不能說(shuō)明數(shù)據(jù)庫(kù)性能良好,它不是衡量數(shù)據(jù)庫(kù)性能好壞的指標(biāo)。第二個(gè)等待事件db file sequential read等待次數(shù)遠(yuǎn)遠(yuǎn)多于后幾個(gè),但它所占的響應(yīng)時(shí)間比重并不大,說(shuō)明等待事件并不是太嚴(yán)重。下面來(lái)分析一下這個(gè)等待事件次數(shù)過(guò)多的原因。
通過(guò)查詢v$session_wait視圖,用來(lái)定位當(dāng)前等待會(huì)話所等待數(shù)據(jù)的具體數(shù)據(jù)文件。查詢出數(shù)據(jù)文件號(hào)5和數(shù)據(jù)塊號(hào)55560,進(jìn)一步定位等待事件相關(guān)的數(shù)據(jù)庫(kù)表。登錄數(shù)據(jù)庫(kù)查看這張表,發(fā)現(xiàn)該表的結(jié)構(gòu)比較復(fù)雜,存在BLOB類型的大字段,并且數(shù)據(jù)量巨大。通過(guò)與業(yè)務(wù)人員溝通,了解到此表是業(yè)務(wù)主表,訪問(wèn)量大。通過(guò)觀察服務(wù)器硬件資源的使用情況,處于正常狀態(tài),所以決定不對(duì)它調(diào)整,再進(jìn)一步密切觀察。
3. 數(shù)據(jù)庫(kù)故障的分析排除
3.1 故障分析
數(shù)據(jù)庫(kù)管理員在日常的數(shù)據(jù)庫(kù)監(jiān)控中,有多種手段,比如利用系統(tǒng)命令prstat、vmstat等去監(jiān)控系統(tǒng)資源的使用情況;利用telnet命令登陸服務(wù)器觀察器cpu及I/O是否出現(xiàn)異常;利用數(shù)據(jù)庫(kù)視圖v$session等觀察數(shù)據(jù)庫(kù)的連接是否處于正常狀態(tài);利用spotlight、AWR工具獲取數(shù)據(jù)庫(kù)實(shí)時(shí)運(yùn)行情況等等。
首先我們登錄生產(chǎn)數(shù)據(jù)庫(kù),利用prstat –a查看系統(tǒng)進(jìn)程消耗資源情況。通過(guò)查看運(yùn)行結(jié)果,我們發(fā)現(xiàn)進(jìn)程號(hào)為96的進(jìn)程運(yùn)行時(shí)間已長(zhǎng)達(dá)三天,這表示此進(jìn)程已遇到故障無(wú)法自動(dòng)退出。我們下面要找出此進(jìn)程無(wú)法退出的原因,必要的話要手動(dòng)殺掉。
3.2 故障排除
首先我們抓取了最近幾天數(shù)據(jù)庫(kù)高峰期的awr報(bào)告,對(duì)比了一下awr報(bào)告,沒(méi)發(fā)現(xiàn)有什么異常情況發(fā)生,系統(tǒng)資源及數(shù)據(jù)庫(kù)運(yùn)行情況都處于正常狀況。
利用sql語(yǔ)句查出此進(jìn)程正在運(yùn)行的sql語(yǔ)句。我們利用autotrace命令得到了這條sql的執(zhí)行計(jì)劃。通過(guò)分析執(zhí)行計(jì)劃,也沒(méi)有發(fā)現(xiàn)異常資源的消耗。由此,我們判斷,此進(jìn)程是數(shù)據(jù)庫(kù)服務(wù)器沒(méi)有正常退出的異常進(jìn)程,可以手工將它殺掉。至于為什么沒(méi)有正常退出,可能是系統(tǒng)的bug,需要進(jìn)一步研究。
首先查找出此進(jìn)程對(duì)應(yīng)的數(shù)據(jù)庫(kù)會(huì)話,查詢出此進(jìn)程對(duì)應(yīng)的會(huì)話的SID和SERIAL#為20和44658。
利用alter system kill session 20,44658殺掉此會(huì)話,然后登陸數(shù)據(jù)庫(kù)服務(wù)器利用命令kill -1 pid終止此異常進(jìn)程。再次利用prstat –a查看系統(tǒng)資源,發(fā)現(xiàn)此異常進(jìn)程已被殺掉,系統(tǒng)恢復(fù)正常。
4. 結(jié)束語(yǔ)
數(shù)據(jù)庫(kù)調(diào)優(yōu)在日常的數(shù)據(jù)庫(kù)運(yùn)維中占據(jù)了數(shù)據(jù)庫(kù)管理員70%的工作量。除了調(diào)優(yōu),設(shè)置內(nèi)存參數(shù)、對(duì)數(shù)據(jù)的存儲(chǔ)劃分等,都是數(shù)據(jù)庫(kù)日常運(yùn)維的一部分。數(shù)據(jù)庫(kù)管理員的工作對(duì)一個(gè)公司來(lái)說(shuō),處于非常重要的位置。一旦數(shù)據(jù)庫(kù)運(yùn)行不穩(wěn)定或出現(xiàn)故障,對(duì)公司造成的損失是不可估量的。因此,數(shù)據(jù)庫(kù)管理員在日常的運(yùn)維中,一定要細(xì)中再細(xì),做好公司數(shù)據(jù)庫(kù)的“管家婆”。
參考文獻(xiàn):
[1] 何曾樑.基于等待事件的Oracle數(shù)據(jù)庫(kù)性能優(yōu)化.現(xiàn)代計(jì)算機(jī),2009,(7):106-109.
[2] 張文峰,彭小斌,林根深.AWR技術(shù)在ORACLE自動(dòng)管理中的應(yīng)用.中國(guó)數(shù)學(xué)醫(yī)學(xué),2014,(8):114-115.