數(shù)據(jù)庫(kù)日常運(yùn)維工作是指生產(chǎn)系統(tǒng)正式上線運(yùn)行后,隨著數(shù)據(jù)量和用戶數(shù)的不斷增加,醫(yī)院信息中心需要投人專業(yè)的技術(shù)人員按照一定的時(shí)間周期來(lái)對(duì)數(shù)據(jù)庫(kù)進(jìn)行的一系列預(yù)防性檢查的工作。數(shù)據(jù)庫(kù)日常運(yùn)維工作非常重要,因?yàn)槌送话l(fā)的故障以外,運(yùn)維期間大部分的問(wèn)題都會(huì)在日常運(yùn)維中發(fā)現(xiàn)。因此,日常運(yùn)維工作做得好不好,直接關(guān)系到數(shù)據(jù)庫(kù)是否能穩(wěn)定運(yùn)行。
數(shù)據(jù)庫(kù)日常運(yùn)維頻率及內(nèi)容
通常來(lái)講,數(shù)據(jù)庫(kù)運(yùn)維的頻率分為每日維護(hù)、每月維護(hù)和定期維護(hù)。
(一)數(shù)據(jù)庫(kù)每日維護(hù)內(nèi)容
數(shù)據(jù)庫(kù)運(yùn)維一般都由專門的DBA來(lái)完成,DBA要負(fù)責(zé)每天對(duì)數(shù)據(jù)庫(kù)的運(yùn)行狀態(tài)進(jìn)行檢查,同時(shí)需要和數(shù)據(jù)庫(kù)之前的運(yùn)行狀態(tài)進(jìn)行對(duì)比,通過(guò)對(duì)比分析來(lái)及時(shí)對(duì)數(shù)據(jù)庫(kù)進(jìn)行必要的調(diào)整,保障數(shù)據(jù)庫(kù)運(yùn)行的穩(wěn)定。
DBA每天對(duì)數(shù)據(jù)庫(kù)進(jìn)行的工作有:確認(rèn)數(shù)據(jù)庫(kù)狀態(tài)正常,DBA需要登錄操作系統(tǒng)或者數(shù)據(jù)庫(kù),確認(rèn)數(shù)據(jù)庫(kù)的運(yùn)行狀態(tài)是處于OPEN狀態(tài);檢查操作系統(tǒng)的文件系統(tǒng)的狀態(tài),主機(jī)操作系統(tǒng)的文件系統(tǒng)空間或者I/O異常會(huì)造成數(shù)據(jù)庫(kù)運(yùn)行異常;檢查日志文件記錄,數(shù)據(jù)庫(kù)的日志文件用來(lái)記錄數(shù)據(jù)庫(kù)在運(yùn)行過(guò)程中重要的狀態(tài)和錯(cuò)誤;檢查數(shù)據(jù)庫(kù)備份和容災(zāi)的狀態(tài),需要檢查最新的備份工作是否成功完成,及時(shí)找出失敗的原因并處理;每天至少檢查一次容災(zāi)系統(tǒng)的運(yùn)行狀態(tài),保證容災(zāi)系統(tǒng)工作正常;檢查數(shù)據(jù)庫(kù)空間使用情況,數(shù)據(jù)庫(kù)都是通過(guò)數(shù)據(jù)文件來(lái)分配空間的,需要定期檢查數(shù)據(jù)文件是否還有剩余空間來(lái)存放數(shù)據(jù),及時(shí)增加數(shù)據(jù)文件或者擴(kuò)展數(shù)據(jù)文件;監(jiān)控?cái)?shù)據(jù)庫(kù)性能表現(xiàn),監(jiān)控主要側(cè)重于數(shù)據(jù)庫(kù)的重要性能指標(biāo)。如實(shí)例命中率、SQL執(zhí)行時(shí)間等和昨天的同時(shí)間段比較是否有明顯變化,如果出現(xiàn)明顯性能下降的趨勢(shì),如SQL執(zhí)行時(shí)間同比超過(guò)50%,則需要啟動(dòng)數(shù)據(jù)庫(kù)優(yōu)化的工作。
(二)數(shù)據(jù)庫(kù)每月維護(hù)內(nèi)容
數(shù)據(jù)庫(kù)每月的日常運(yùn)維,主要分析數(shù)據(jù)庫(kù)當(dāng)月的運(yùn)行趨勢(shì)和未來(lái)的發(fā)展趨勢(shì),以便DBA及時(shí)對(duì)數(shù)據(jù)庫(kù)進(jìn)行調(diào)整來(lái)適應(yīng)新的運(yùn)維需求。監(jiān)控?cái)?shù)據(jù)庫(kù)重要表的空間擴(kuò)展情況,針對(duì)數(shù)據(jù)庫(kù)中存放數(shù)據(jù)最多的重要的大數(shù)據(jù)表,如醫(yī)囑明細(xì)表、住院明細(xì)表等,每月收集最大10個(gè)表的占用空間,同比上個(gè)月的數(shù)據(jù)對(duì)比得出月數(shù)據(jù)增長(zhǎng)量;檢查失效的數(shù)據(jù)庫(kù)對(duì)象,數(shù)據(jù)庫(kù)對(duì)象狀態(tài)失效的原因很多,如存儲(chǔ)過(guò)程中相關(guān)的表改名后,存儲(chǔ)過(guò)程就變成失效的狀態(tài);檢查無(wú)效的觸發(fā)器和約束,數(shù)據(jù)庫(kù)觸發(fā)器和約束失效后,數(shù)據(jù)庫(kù)和應(yīng)用系統(tǒng)可能沒(méi)有馬上報(bào)錯(cuò),但是與這些觸發(fā)器相關(guān)的應(yīng)用數(shù)據(jù)可能會(huì)出現(xiàn)不一致的情況;數(shù)據(jù)庫(kù)報(bào)錯(cuò)和處理情況進(jìn)行匯總,每月對(duì)當(dāng)月檢查到的錯(cuò)誤和排除的過(guò)程進(jìn)行匯總和歸檔,一方面,以后遇到類似錯(cuò)誤可以很快找到解決方案;另一方面,也可以為數(shù)據(jù)庫(kù)運(yùn)行穩(wěn)定狀態(tài)提供可靠的數(shù)據(jù)。
(三)數(shù)據(jù)庫(kù)定期維護(hù)內(nèi)容
有一些日常維護(hù)的工作,需要定期執(zhí)行但是執(zhí)行的頻率需要根據(jù)數(shù)據(jù)庫(kù)運(yùn)行的實(shí)際情況來(lái)做彈性的調(diào)整,這部分維護(hù)工作包括:檢查和處理數(shù)據(jù)表的碎片情況,醫(yī)院信息系統(tǒng)的數(shù)據(jù)庫(kù)是一個(gè)典型的OLTP數(shù)據(jù)庫(kù),在數(shù)據(jù)庫(kù)日常使用過(guò)程中必然會(huì)發(fā)生很多更新和刪除操作,隨著時(shí)間的推移,數(shù)據(jù)庫(kù)中會(huì)產(chǎn)生越來(lái)越多分隔的、離散的、較小的自由空間,隨著數(shù)據(jù)庫(kù)碎片數(shù)量的增加,會(huì)給數(shù)據(jù)庫(kù)帶來(lái)性能低下,空間使用效率不高等問(wèn)題。因此,根據(jù)數(shù)據(jù)庫(kù)實(shí)際使用情況,需要對(duì)重要表進(jìn)行碎片整理,消除碎片對(duì)數(shù)據(jù)庫(kù)的影響;定期對(duì)索引進(jìn)行維護(hù)和管理,在OLTP的數(shù)據(jù)中創(chuàng)建索引是為了提高數(shù)據(jù)檢索的速度,特別是創(chuàng)建唯一性的索引。但是數(shù)據(jù)庫(kù)的索引并不是越多越好,數(shù)據(jù)庫(kù)維護(hù)索引的代價(jià)很大。定期檢查和分析數(shù)據(jù)庫(kù)索引的合理性,根據(jù)業(yè)務(wù)需求添加合適的索引,刪除無(wú)須要的索引也是DBA必不可少的維護(hù)工作;定期分析數(shù)據(jù)庫(kù)性能表現(xiàn),數(shù)據(jù)庫(kù)的性能表現(xiàn)隨著數(shù)據(jù)量的增加,理論上來(lái)說(shuō)會(huì)呈下降趨勢(shì),簡(jiǎn)單來(lái)講就是同一條SQL語(yǔ)句執(zhí)行時(shí)間越來(lái)越久。因此,應(yīng)該定期觀察數(shù)據(jù)庫(kù)的性能表現(xiàn),如SQL的執(zhí)行時(shí)間、數(shù)據(jù)庫(kù)的繁忙時(shí)間、數(shù)據(jù)庫(kù)的等待事件等,并和之前的數(shù)據(jù)庫(kù)性能進(jìn)行對(duì)比。如果發(fā)現(xiàn)性能有明顯下降的趨勢(shì),需要及時(shí)啟動(dòng)數(shù)據(jù)庫(kù)優(yōu)化工作,以免對(duì)正常業(yè)務(wù)運(yùn)行造成影響。
數(shù)據(jù)庫(kù)可用空間運(yùn)維
一般來(lái)說(shuō),數(shù)據(jù)庫(kù)可用空間包含3個(gè)部分:用以存放數(shù)據(jù)文件的文件系統(tǒng)或磁盤(pán)組剩余空間、數(shù)據(jù)庫(kù)表空間的剩余空間、數(shù)據(jù)庫(kù)系統(tǒng)軟件的安裝目錄剩余空間。
數(shù)據(jù)庫(kù)文件包括數(shù)據(jù)文件、日志文件、控制文件等,這些文件在數(shù)據(jù)庫(kù)建立的時(shí)候就需要選擇操作系統(tǒng)適當(dāng)?shù)奈恢脕?lái)存放,一般存放的位置是文件系統(tǒng)、裸設(shè)備或者ASM磁盤(pán)組(Oracle獨(dú)有)。如果這幾部分空間不足,短期內(nèi)不會(huì)影響數(shù)據(jù)庫(kù)的正常使用,但是如果遇到數(shù)據(jù)庫(kù)需要擴(kuò)展表空間或者增加數(shù)據(jù)文件,就會(huì)面臨無(wú)空間可用的情況。DBA需要及時(shí)擴(kuò)充對(duì)應(yīng)的存儲(chǔ)空間來(lái)為數(shù)據(jù)庫(kù)的擴(kuò)充預(yù)留空間。
數(shù)據(jù)庫(kù)表空間是用來(lái)存放數(shù)據(jù)表的數(shù)據(jù)空間,如果這部分空間不足,數(shù)據(jù)庫(kù)會(huì)馬上掛起,無(wú)法響應(yīng)大部分的業(yè)務(wù)操作,特別是數(shù)據(jù)庫(kù)特殊的表空間(用于存放元數(shù)據(jù))若空間不足則可能引起數(shù)據(jù)庫(kù)宕機(jī)等更嚴(yán)重的故障。如果一次性地給數(shù)據(jù)庫(kù)表空間分配大量空間,則會(huì)影響數(shù)據(jù)庫(kù)備份等其他維護(hù)操作的難度和復(fù)雜度。因此,在日常維護(hù)中,數(shù)據(jù)庫(kù)表空間按足夠未來(lái)3~6個(gè)月使用的原則來(lái)分配,隨時(shí)添加數(shù)據(jù)文件來(lái)保障數(shù)據(jù)庫(kù)的正常運(yùn)行。
數(shù)據(jù)庫(kù)軟件存放的文件系統(tǒng)一般來(lái)說(shuō)不會(huì)有太大的數(shù)據(jù)增量,其中最多的數(shù)據(jù)增量來(lái)源于數(shù)據(jù)庫(kù)的日志文件、錯(cuò)誤告警文件等。當(dāng)數(shù)據(jù)庫(kù)出現(xiàn)大量的錯(cuò)誤時(shí),會(huì)產(chǎn)生大量的錯(cuò)誤告警文件,這些文件會(huì)把文件系統(tǒng)爆滿。如果發(fā)生這樣的情況,數(shù)據(jù)庫(kù)也會(huì)無(wú)法響應(yīng)連接請(qǐng)求,應(yīng)用系統(tǒng)也會(huì)出現(xiàn)異常。
數(shù)據(jù)庫(kù)內(nèi)存參數(shù)運(yùn)維
數(shù)據(jù)庫(kù)相關(guān)配置參數(shù),特別是內(nèi)存參數(shù),在數(shù)據(jù)庫(kù)建立之前就已經(jīng)根據(jù)數(shù)據(jù)量大小和用戶數(shù)多少設(shè)計(jì)好相對(duì)優(yōu)化的數(shù)據(jù)。在數(shù)據(jù)庫(kù)運(yùn)維過(guò)程中,需要觀察數(shù)據(jù)庫(kù)內(nèi)存參數(shù)是否滿足業(yè)務(wù)需求:無(wú)論何種數(shù)據(jù)庫(kù),都需要將經(jīng)常訪問(wèn)的數(shù)據(jù)存放在數(shù)據(jù)高速緩沖區(qū)中,利用內(nèi)存百倍于硬盤(pán)的響應(yīng)速度來(lái)提高整個(gè)數(shù)據(jù)庫(kù)的響應(yīng)速度,減少I/O等待時(shí)間。
正常情況下,醫(yī)院HIS這種OLTP系統(tǒng)數(shù)據(jù)高速緩沖區(qū)的命中率都應(yīng)該在90%以上。通過(guò)定期觀察數(shù)據(jù)高速緩沖區(qū)的命中率來(lái)判斷是否需要調(diào)整內(nèi)存參數(shù),在命中率下降的情況下調(diào)大數(shù)據(jù)高速緩沖區(qū)可以提高數(shù)據(jù)響應(yīng)速度。但是建議數(shù)據(jù)庫(kù)占用內(nèi)存總和不要超過(guò)物理內(nèi)存的一半。