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