秦士兵
(重慶市電力公司信息通信分公司 ,重慶 400014)
傳統(tǒng)數(shù)據(jù)庫管理依靠數(shù)據(jù)庫管理員來完成,數(shù)據(jù)庫管理員的職責(zé)如下:
(1)定時(shí)對數(shù)據(jù)庫的運(yùn)行狀態(tài),日志文件,備份情況,數(shù)據(jù)庫空間使用情況,系統(tǒng)資源使用情況進(jìn)行檢查,發(fā)現(xiàn)并解決問題;(2)每周對數(shù)據(jù)庫對象的空間擴(kuò)展情況,數(shù)據(jù)增長情況進(jìn)行監(jiān)控,對數(shù)據(jù)庫做健康檢查,對數(shù)據(jù)庫對象的狀態(tài)做檢查;(3)每月對表、索引、約束、作業(yè)等數(shù)據(jù)庫對象進(jìn)行分析,檢查表空間碎片,尋找數(shù)據(jù)庫性能調(diào)整的機(jī)會,進(jìn)行數(shù)據(jù)庫性能調(diào)整,提出下一步空間管理計(jì)劃。對數(shù)據(jù)庫狀態(tài)進(jìn)行一次全面檢查。
這樣的管理對數(shù)據(jù)庫明顯存在以下局限性:一是雖然目前各種數(shù)據(jù)庫產(chǎn)品本身提供了大量功能強(qiáng)大的性能監(jiān)控和調(diào)試工具,如0RACLE的OEM、Performance Manager、capacity Planer 等來幫助數(shù)據(jù)庫管理員對數(shù)據(jù)庫性能進(jìn)行調(diào)整、優(yōu)化,但是精通掌握這些工具并能通過這些工具來有效地分析數(shù)據(jù)庫性能狀態(tài),進(jìn)而合理地配置數(shù)據(jù)庫以調(diào)整其性能十分困難;二是數(shù)據(jù)庫維護(hù)管理被動,數(shù)據(jù)庫管理依賴數(shù)據(jù)庫管理員的責(zé)任心和能力,數(shù)據(jù)庫能否穩(wěn)定運(yùn)行和健壯性取決于管理員的態(tài)度;三是數(shù)據(jù)庫日常性能、異常診斷不及時(shí)。
針對這種情況.本文提出了數(shù)據(jù)庫監(jiān)控系統(tǒng),實(shí)現(xiàn)數(shù)據(jù)庫主動監(jiān)控和維護(hù),系統(tǒng)通過對數(shù)據(jù)庫進(jìn)行日常性能監(jiān)控、每月性能評估、數(shù)據(jù)庫審計(jì)、異常診斷及時(shí)發(fā)現(xiàn)問題和解決問題。為數(shù)據(jù)庫管理員提供了管理和維護(hù)數(shù)據(jù)庫的輔助工具,提高了數(shù)據(jù)庫管理員的工作效率。為數(shù)據(jù)庫每天24小時(shí)不間斷運(yùn)行提供了有力保障。提前預(yù)判斷數(shù)據(jù)庫性能臆患,增強(qiáng)數(shù)據(jù)庫的健壯性,確保業(yè)務(wù)系統(tǒng)持續(xù)不斷地運(yùn)行。
數(shù)據(jù)庫監(jiān)控系統(tǒng),通過創(chuàng)建遠(yuǎn)程數(shù)據(jù)庫鏈的方式與被監(jiān)控的數(shù)據(jù)庫建立連接,通過數(shù)據(jù)庫作業(yè)調(diào)度的方式.定期從被監(jiān)控的數(shù)據(jù)庫中采集各類監(jiān)控指標(biāo)信息,并存人數(shù)據(jù)庫監(jiān)控服務(wù)器的數(shù)據(jù)庫中。系統(tǒng)結(jié)構(gòu)如圖l所示。
圖1 系統(tǒng)結(jié)構(gòu)圖
(1)建立遠(yuǎn)程數(shù)據(jù)庫鏈
數(shù)據(jù)庫監(jiān)控系統(tǒng)與多個(gè)被監(jiān)控的數(shù)據(jù)庫建立連接,向被監(jiān)控?cái)?shù)據(jù)庫中寫入測試數(shù)據(jù),從被監(jiān)控?cái)?shù)據(jù)庫中獲取需要的監(jiān)控信息,在數(shù)據(jù)庫監(jiān)控系統(tǒng)中采用建立遠(yuǎn)程敦?fù)?jù)庫鏈的方式實(shí)現(xiàn)。對于頻繁使用的遠(yuǎn)程數(shù)據(jù)庫的連接,建立遠(yuǎn)程數(shù)據(jù)庫鏈(database links)指定連接所使用的連接描述器,也可以指定遠(yuǎn)程數(shù)據(jù)庫連接的用戶名。當(dāng)遠(yuǎn)程數(shù)據(jù)庫鏈被一個(gè)SQL語句所指時(shí),它將在遠(yuǎn)程數(shù)據(jù)庫中打開一個(gè)會話并在那執(zhí)行SQL語句,然后返回?cái)?shù)據(jù)。
(2)采用數(shù)據(jù)庫作業(yè)調(diào)度實(shí)現(xiàn)信息采集數(shù)據(jù)庫監(jiān)控系統(tǒng)需要定期從被監(jiān)控?cái)?shù)據(jù)庫中獲取監(jiān)控指標(biāo)信息,是個(gè)周而復(fù)始自動執(zhí)行的循環(huán)過程,在數(shù)據(jù)庫監(jiān)控系統(tǒng)中采用0racle數(shù)據(jù)庫的作業(yè)調(diào)度方式宴現(xiàn)自動執(zhí)行信息采集過程。
作業(yè)指定了要執(zhí)行的動作以及執(zhí)行動作的時(shí)間。要執(zhí)行的動作可以是SQL語句PL/SQL代碼塊、PL/SQL存儲過程、JAVA存儲過程、外部過程或者在服務(wù)器文件系統(tǒng)中儲存的任何可執(zhí)行文件(既可以是二進(jìn)制可執(zhí)行文件。也可以是外殼腳本)。執(zhí)行動作的時(shí)間指定了啟動作業(yè)時(shí)的時(shí)間標(biāo)記以及用于今后運(yùn)行的重復(fù)時(shí)間間隔。
(3)依據(jù)MPI(Memory Performance Index)內(nèi)存性能評估指數(shù)對數(shù)據(jù)庫內(nèi)存性能進(jìn)行綜合評估。
系統(tǒng)使用內(nèi)存性能指數(shù)(MPI Memory Performance Index),作為數(shù)據(jù)庫內(nèi)存的使用和分配情況的晴雨表,對數(shù)據(jù)庫的內(nèi)存性能進(jìn)行綜合評分,根據(jù)綜合評分的高低判斷數(shù)據(jù)庫的運(yùn)行狀態(tài)。
下表列出了MPI中的各項(xiàng)指數(shù)。
表1 MPI中的各項(xiàng)指數(shù)表
3.1 實(shí)現(xiàn)數(shù)據(jù)庫日常監(jiān)控
通過登記數(shù)據(jù)庫鏈創(chuàng)建語句和測試表創(chuàng)建語句。在被監(jiān)控?cái)?shù)據(jù)庫的SYSTEM用戶中,手工創(chuàng)建數(shù)據(jù)庫鏈和測試表,實(shí)現(xiàn)記錄被監(jiān)控?cái)?shù)據(jù)庫的基本信息。系統(tǒng)每隔5秒鐘對被監(jiān)控的數(shù)據(jù)庫進(jìn)行一次寫入測試,通過測試結(jié)果判斷被監(jiān)控的數(shù)據(jù)庫是否正常運(yùn)行。系統(tǒng)每隔10秒鐘檢測一下表空間的變化情況并計(jì)算表空間使用率。建立庫緩存命中率(共享池),存放SQL語句或PL/SQL塊、包、存儲過程對象及執(zhí)行計(jì)劃等,避免對SQL語句的重新解析。建立數(shù)據(jù)字典緩沖區(qū)總的命中率(共享池)顯示了對數(shù)據(jù)字典和其他對象的內(nèi)存讀操作的百分比,當(dāng)數(shù)據(jù)字典緩沖區(qū)總的命中率<90%時(shí),就要加大SHARED_POOL_SIZE的值。進(jìn)行內(nèi)存和磁盤排序(PGA內(nèi)存進(jìn)程全局區(qū)),用戶的排序可在內(nèi)存中執(zhí)行也可在磁盤上執(zhí)行,用以顯示在內(nèi)存中排序占總排序的百分比。通過查看SGA的分配情況(SGA內(nèi)存系統(tǒng)全局區(qū))其中:Fixed Size :oracle的不同平臺和不同版本下可能不一樣,但對于確定環(huán)境是一個(gè)固定值,里面存儲了SGA各部分組件的信息,可以看作引導(dǎo)建立SGA的區(qū)域。
3.2 實(shí)現(xiàn)數(shù)據(jù)庫性能評估
首先定義數(shù)據(jù)庫內(nèi)存性能評分標(biāo)準(zhǔn),根據(jù)數(shù)據(jù)庫內(nèi)存性能評分標(biāo)準(zhǔn)計(jì)算數(shù)據(jù)庫性能得分。如果如果評分MPI指數(shù)得分小于100分,表明數(shù)據(jù)庫內(nèi)存性能很差,需要優(yōu)化數(shù)據(jù)庫和調(diào)整數(shù)據(jù)庫參數(shù)。
3.3 數(shù)據(jù)庫審計(jì)
實(shí)現(xiàn)直觀查看數(shù)據(jù)文件狀態(tài)功能,如果狀態(tài)為AVAILABLE,表示數(shù)據(jù)文件正常。如果狀態(tài)為UNAVAILABLE,表示數(shù)據(jù)文件不正常,數(shù)據(jù)文件不正常將不能對數(shù)據(jù)文件中的數(shù)據(jù)進(jìn)行增加、刪除、修改和查詢操作,需要查明原因。檢查數(shù)據(jù)庫死鎖情況 ,當(dāng)兩個(gè)事務(wù)需要一組有沖突的鎖,而不能將事務(wù)繼續(xù)下去的話,就出現(xiàn)死鎖,需要?dú)⒌糸L期沒有釋放非正常的鎖。檢查不起作用的約束,如果無效的數(shù)據(jù)庫對象也業(yè)務(wù)系統(tǒng)有關(guān),則要查明原因,否則影響業(yè)務(wù)系統(tǒng)的運(yùn)行。檢查無效的數(shù)據(jù)庫對象,如果無效的數(shù)據(jù)庫觸發(fā)器也業(yè)務(wù)系統(tǒng)有關(guān),則要查明原因,否則影響業(yè)務(wù)系統(tǒng)運(yùn)行。查找使用CPU多的用戶會話,當(dāng)數(shù)據(jù)庫性能降低時(shí),需要查看使用CPU多的用戶會話,具體分析哪個(gè)客戶端機(jī)器的程序影響了數(shù)據(jù)庫服務(wù)器CPU性能。
圖2 數(shù)據(jù)庫寫入統(tǒng)計(jì)圖
3.4 統(tǒng)計(jì)分析
數(shù)據(jù)庫寫入測試月統(tǒng)計(jì),按月統(tǒng)計(jì)寫入測試總次數(shù)、寫入測試正常次數(shù)和寫入測試正常率。根據(jù)寫入測試正常率可以分析數(shù)據(jù)庫的穩(wěn)定性。如圖2所示。表空間增長情況月統(tǒng)計(jì),分析數(shù)據(jù)庫中數(shù)據(jù)量大變化情況,如果表空間在某個(gè)月增長很多,需要查明原因。有可能是錄入的業(yè)務(wù)數(shù)據(jù)量比較大,也有可能是數(shù)據(jù)庫異常引起,需要區(qū)別對待。
系統(tǒng)改變了傳統(tǒng)的數(shù)據(jù)庫管理和維護(hù)方式,變被動維護(hù)為主動維護(hù),通過對數(shù)據(jù)庫進(jìn)行日常性能監(jiān)控、每月性能評估、數(shù)據(jù)庫審計(jì)、異常診斷及時(shí)發(fā)現(xiàn)隱患問題和解決問題,將數(shù)據(jù)庫隱患消滅在萌芽狀態(tài)。系統(tǒng)通過運(yùn)行后,多次提前發(fā)現(xiàn)業(yè)務(wù)系統(tǒng)數(shù)據(jù)庫由于表空間快速增長,系統(tǒng)性能下降等問題,確保了公司業(yè)務(wù)系統(tǒng)持續(xù)不斷地運(yùn)行。
系統(tǒng)降低了數(shù)據(jù)庫管理員的工作強(qiáng)度,提高了數(shù)據(jù)庫管理員的工作效率,通過數(shù)據(jù)庫監(jiān)控系統(tǒng)可以及時(shí)發(fā)現(xiàn)和解決數(shù)據(jù)庫的各種小問題,預(yù)判斷數(shù)據(jù)庫性能隱患,避免數(shù)據(jù)庫發(fā)生災(zāi)害性故障。通過數(shù)據(jù)庫監(jiān)控系統(tǒng)可以增強(qiáng)數(shù)據(jù)庫的健康性,確保業(yè)務(wù)系統(tǒng)持續(xù)不斷地運(yùn)行。提高工作效率和服務(wù)質(zhì)量。
[1]魏雄俊.數(shù)據(jù)庫技術(shù)在電力系統(tǒng)中的應(yīng)用,2008-05-03.
[2]趙自剛.建立電力系統(tǒng)故障數(shù)據(jù)庫的基本構(gòu)想,2000-05-30.