楊春松,王 寬
(1.南瑞集團有限公司,江蘇 南京211000;2.南京基石數據有限責任公司,江蘇 南京210093)
在日常的數據庫維護和性能優化中,大多數情況是平時沒問題,有問題時沒法解決,或者不敢去操作,通常都是在數據庫已經出現了比較明顯且嚴重的問題時才開始采取優化措施,并且是在解決問題之后,而不是發現問題之前。但是這時候基本上已經對應用造成了影響[3],且依賴高水平的DBA去解決這些問題,削弱減少這些影響。那我們如何才能針對數據庫已展現的一些“量”的問題進行診斷,優化,從而防止其成為“質”的問題呢?
“吞吐量”和”響應時間”是衡量Oracle數據庫性能的最主要的兩個方面[2]。通常情況下可以通過優化生產環境的操作系統、數據庫環境、網絡IO及應用程序等策略來提高這兩項指標,AWR報告基本囊括了以上的指標內容[1]。根據上述內容,我們制定了一套由操作系統,數據庫命中率,數據庫IO相關,數據庫RAC相關,數據庫并發相關,數據庫整體情況的診斷模型,用其診斷數據庫,根據診斷結果提出建議,優化方案的項目。該項目用zookeeper作為通信,采用B/S架構,支持高并發,多種采集腳本,多種操作系統,目前支持的數據庫的版本暫時有Oracle10g,Oracle11g。針對不同的業務場景的實際生產環境的生產庫,制定了多種評分模型,整體模型組成基本不變,加減項權重發生改變。原則上只對生產庫進行系統表的查詢操作,并采用采集腳本周期性一次采集計算入庫,這樣可以占用少量的資源和會話數。應當指出的是,由于數據庫、操作系統、應用軟件是相互依存的組成部分,都必須調整相互配合才能產生最佳的性能,因此該工程也會對數據庫所在服務器進行相關數據的采集,而對應的評分模型則應根據系統的具體情況以及特點,具體分析和調整。這樣才能減少現場運維人員的工作量,簡化了運維操作與操作流程,降低了各種生產環境對高級DBA的依賴。
實際上在針對Oracle10g及以上的數據庫進行診斷分析時,參考AWR報告,但又不完全依賴AWR報告,并且本質上AWR報告是對Oracle數據庫本身的時間段內的自檢,底層也是通過SQL查詢各種系統表實現的,該項目直接通過生成AWR報告的底層SQL,寫成通用和定制腳本,對數據庫運行狀態的瞬時數據進行查詢并持久化到數據庫,流程如圖1所示。因此可以將采集數據,計算結果,分析內容,分析結果,優化建議,優化操作等進行可視化展示,從而讓用戶對自己的生產庫的運行狀況有一個總體的認知,能夠有效地診斷出數據庫的問題或者隱患,能夠針對這問題或隱患提出優化建議和解決辦法。與此同時該工程還能形成日檢報告,讓運維人員對生產庫過去一天運維狀況大致地了解,提高DBA對應生產庫以及生產環境的后續運維的工作效率。
按照圖1的流程可以發現,該項目針對多種生產庫進行數據的采集,結果的計算,內容的分析,結果的分析,優化建議,優化操作。而針對不同的生產環境或者生產庫,我們就需要定制不同的模型去適配,從而保證模型的優選。需要指出的是,這是一個學習的過程,我們并不能證明模型與生產庫匹配的正確性,但是能夠保證模型與生產庫匹配的合理性,這是一個日積月累的過程,是各個領域的DBA對生產環境,生產庫運維知識的沉淀與積累,同時也具備了一定的先見性,可以見微知著,防患于未然。
圖1 數據庫診斷流程
上文所述,該項目定制了模型包含很多個指標項,這些指標項就是通底層SQL(采集腳本)查詢得到。該模型對比AWR報告又區別于它,AWR報告是將強關聯的相關數據內容進行展示,但是該模型是將可能影響數據庫性能負載的相關項都采集進來,再加權算比重,對數據庫進行打分,通過分值體現數據庫的健康、運行、性能負載等狀態。在一定的分值范圍內告知運維人員,針對減分項如何去調優,針對問題項如何去解決,從而解決平時的“量”的問題,有效防止由量的問題所產生的質的問題,同時即便產生了質的問也能通過分值波動轉折點,采集項值的斷崖式上升或下降快速定位問題。
該項目幫助DBA日常梳理優化數據庫與服務器,但是仍是免不了出現一些日常維護以外的問題,而這些問題的引因、優化方式、解決辦法等通常都是超出了運維人員的操作、認知和解決能力的范疇,通過該工程的模型分析和歷史數據對比,以及問題的快速定位,可以幫助初級DBA對生產庫以及服務器的運維,從而減少了大多數情況下對高級DBA的依賴,間接優化了運維人員結構,發揮最大效益。
ORACLE數據庫的性能優化調整是一個系統工程,涉及的方面很多。同時也是一個漸進的過程,隨著系統的運行和數據量的增加,方法變得多樣。DBA需要綜合運用優化的方法,認真分析其運行過程中出現的各種問題,才能保證數據庫高效地運行。該項目基本包含了DBA認知范圍內所有的業務場景、生產環境。因而可以按需定制,針對不同的業務場景、生產庫,制定不同的模型,才能最優地發現其所對應的隱患和問題,才能讓低級運維人員也能在可控范圍內對數據庫進行性能優化、問題解決等操作。