武文斌
摘要:Oracle數(shù)據(jù)庫(kù)是以高級(jí)結(jié)構(gòu)化查詢(xún)語(yǔ)言(SQL)為基礎(chǔ)的大型關(guān)系數(shù)據(jù)庫(kù),能夠?qū)ο到y(tǒng)提供穩(wěn)健的支持。隨著Oracle數(shù)據(jù)庫(kù)應(yīng)用的不斷深入,Oracle數(shù)據(jù)庫(kù)維護(hù)和性能優(yōu)化至關(guān)重要。本文從Oracle數(shù)據(jù)庫(kù)性能優(yōu)化的視角出發(fā),結(jié)合研究現(xiàn)狀,從一個(gè)全新的角度對(duì)Oracle數(shù)據(jù)庫(kù)性能優(yōu)化與實(shí)時(shí)監(jiān)控技術(shù)進(jìn)行研究,并提出針對(duì)性的建議。
關(guān)鍵詞:Oracle數(shù)據(jù)庫(kù);性能優(yōu)化;監(jiān)控系統(tǒng)
中圖分類(lèi)號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1009-3044(2019)07-0003-02
從當(dāng)前IT系統(tǒng)的現(xiàn)狀來(lái)看,大型應(yīng)用系統(tǒng)多基于大型關(guān)系型數(shù)據(jù)庫(kù),但關(guān)系型數(shù)據(jù)庫(kù)會(huì)隨著聯(lián)機(jī)用戶(hù)的持續(xù)增加而對(duì)應(yīng)用系統(tǒng)性能造成制約,并且基于關(guān)系型數(shù)據(jù)庫(kù)的大型應(yīng)用系統(tǒng)性能的提升是硬件系統(tǒng)擴(kuò)容,但通常費(fèi)用較為昂貴。在這種背景下,Oracle數(shù)據(jù)庫(kù)以其使用方便、可移植性好、功能強(qiáng)大的優(yōu)點(diǎn),能夠?qū)Ξ?dāng)前大用戶(hù)背景下的應(yīng)用系統(tǒng)提供穩(wěn)健的支持,因此Oracle數(shù)據(jù)庫(kù)的性能優(yōu)化和監(jiān)控分析具有重大的現(xiàn)實(shí)意義。
1 Oracle數(shù)據(jù)庫(kù)概述
Oracle數(shù)據(jù)庫(kù)是以高級(jí)結(jié)構(gòu)化查詢(xún)語(yǔ)言為基礎(chǔ)的大型關(guān)系數(shù)據(jù)庫(kù),在系統(tǒng)應(yīng)用中,隨著數(shù)據(jù)量的不斷增大,Oracle數(shù)據(jù)庫(kù)需要加以?xún)?yōu)化調(diào)整才能發(fā)揮應(yīng)有功效。對(duì)Oracle數(shù)據(jù)庫(kù)性能進(jìn)行優(yōu)化調(diào)整就需要先了解其體系結(jié)構(gòu),即物理結(jié)構(gòu)、進(jìn)程結(jié)構(gòu)、內(nèi)存結(jié)構(gòu)、邏輯結(jié)構(gòu)。物理結(jié)構(gòu)是指組成數(shù)據(jù)庫(kù)的操作系統(tǒng)物理文件,包括控制文件、參數(shù)文件、數(shù)據(jù)文件、歸檔日志文件和重做日志文件;進(jìn)程結(jié)構(gòu)包括后臺(tái)進(jìn)程、用戶(hù)進(jìn)程和服務(wù)器進(jìn)程;內(nèi)存結(jié)構(gòu)包括Java池、程序全局區(qū)、排序區(qū)、系統(tǒng)全局區(qū)、大池;邏輯結(jié)構(gòu)包括數(shù)據(jù)塊、區(qū)、段、表空間、模式對(duì)象。
對(duì)Oracle數(shù)據(jù)庫(kù)性能進(jìn)行優(yōu)化調(diào)整通常是在兩個(gè)階段,即設(shè)計(jì)階段和數(shù)據(jù)庫(kù)運(yùn)行階段,設(shè)計(jì)階段的優(yōu)化調(diào)整集中于物理結(jié)構(gòu)和邏輯結(jié)構(gòu),數(shù)據(jù)庫(kù)運(yùn)行階段優(yōu)化調(diào)整集中于應(yīng)用程序、網(wǎng)絡(luò)性能、數(shù)據(jù)庫(kù)環(huán)境以及操作系統(tǒng)。操作系統(tǒng)的優(yōu)化調(diào)整方法一般包括控制分頁(yè)、減少內(nèi)存交換、使SGA留駐內(nèi)存。對(duì)Oracle數(shù)據(jù)庫(kù)性能優(yōu)化調(diào)整時(shí)需要先明確哪些因素有較大的影響,因此需對(duì)Oracle數(shù)據(jù)庫(kù)監(jiān)控對(duì)象進(jìn)行分析,包括CPU、I/O、內(nèi)存、會(huì)話(huà)、回退段、Oracle模式對(duì)象。
2 Oracle數(shù)據(jù)庫(kù)性能優(yōu)化
(1)內(nèi)存優(yōu)化
在Oracle數(shù)據(jù)庫(kù)性能優(yōu)化的內(nèi)存優(yōu)化調(diào)整一般是調(diào)整系統(tǒng)全局區(qū)(SGA)。
①共享池調(diào)整:執(zhí)行select namespace, gethitratio from v$librarycache,gethitratio若在95%以下則需注意調(diào)整;重裝率大于1%需調(diào)整共享池大小;字典高速緩存命中率結(jié)果小于85%則需增加共享池的大小。
②重做日志緩沖區(qū)調(diào)整:查詢(xún)重做日志緩沖區(qū)的效率,如果其值不斷增大,則需增加log_buffer的大小。
③緩沖區(qū)高速緩存調(diào)整:Oracle數(shù)據(jù)庫(kù)運(yùn)行時(shí),為縮短響應(yīng)時(shí)間,提高相應(yīng)效率,應(yīng)盡可能從緩沖區(qū)高速緩存中尋找數(shù)據(jù),這需監(jiān)控緩沖區(qū)高速緩存的命中率,如果命中率低于90%,則需增加db_cache_size的值。
(2)I/O優(yōu)化
為提升Oracle數(shù)據(jù)庫(kù)性能,應(yīng)盡量減少磁盤(pán)I/O,并使用本地管理表空間,進(jìn)而平衡I/O,平衡多個(gè)磁盤(pán)驅(qū)動(dòng)器的負(fù)荷。具體優(yōu)化策略包括:①同一表空間多個(gè)數(shù)據(jù)文件存放于不同磁盤(pán);②訪(fǎng)問(wèn)量大的數(shù)據(jù)文件應(yīng)在獨(dú)立磁盤(pán)上進(jìn)行存放;③用戶(hù)數(shù)據(jù)一般不放在system表空間,而是單獨(dú)創(chuàng)建表空間;④創(chuàng)建臨時(shí)表空間用于排序操作,創(chuàng)建單獨(dú)的回滾段表空間,是數(shù)據(jù)庫(kù)碎片不散落在多個(gè)表空間;⑤創(chuàng)建單獨(dú)的索引表空間,其區(qū)分磁盤(pán)存放索引數(shù)據(jù)與表數(shù)據(jù);⑥為減少磁盤(pán)競(jìng)爭(zhēng),重做日志文件單獨(dú)存放,盡量不要與數(shù)據(jù)文件存于統(tǒng)一磁盤(pán),且重做日志文件要足夠大。
(3)CPU優(yōu)化
應(yīng)用系統(tǒng)與應(yīng)用軟件性能不僅受I/O影響,還受CPU約束。工作高峰時(shí)CUP使用率要求在90%以下,如空閑時(shí)CPU使用率依然很高,則需調(diào)整優(yōu)化CPU,增加CPU資源。通過(guò)查看v$sysstat數(shù)據(jù)字典中的用戶(hù)態(tài)CPU時(shí)間和操作態(tài)CPU時(shí)間,查看當(dāng)前連接Oracle數(shù)據(jù)庫(kù)各個(gè)會(huì)話(huà)占用CPU時(shí)間,若操作系統(tǒng)占用CPU時(shí)間在90%以上則說(shuō)明正常,否則說(shuō)明服務(wù)器CPU被其他程序占用過(guò)多,造成CPU資源不足。這是需要分析SQL語(yǔ)句,對(duì)低效率的SQL語(yǔ)句和鎖沖突進(jìn)行調(diào)整優(yōu)化,或增加Oracle參數(shù)高速緩存的光標(biāo)數(shù)的值。
(4)網(wǎng)絡(luò)性能優(yōu)化
網(wǎng)絡(luò)性能是影響Oracle數(shù)據(jù)庫(kù)性能的又一重要因素,優(yōu)化調(diào)整的策略則主要是減少網(wǎng)上數(shù)據(jù)流量。Oracle中的網(wǎng)絡(luò)協(xié)議是Net 8或SQL*Net,其為客戶(hù)端和Oracle服務(wù)器提供透明連通性。為減少網(wǎng)絡(luò)信息流量,確保網(wǎng)絡(luò)吞吐量的快速性,需測(cè)出網(wǎng)絡(luò)增加的延遲。Oracle數(shù)據(jù)庫(kù)系統(tǒng)提供了v$session_wait、v$session_event和v$sesstat三個(gè)動(dòng)態(tài)性能表。
在v$session_event中用信息間等待時(shí)間評(píng)估網(wǎng)絡(luò)效率,在v$session_wait中用等待事件與Oracle做出的回應(yīng)評(píng)估網(wǎng)絡(luò)效率,在v$sesstat中查看接收和發(fā)送到客戶(hù)端的字節(jié)數(shù),以及客戶(hù)端做出的請(qǐng)求數(shù)目,來(lái)評(píng)估網(wǎng)絡(luò)效率。
3 Oracle數(shù)據(jù)庫(kù)監(jiān)控系統(tǒng)設(shè)計(jì)實(shí)現(xiàn)
(1)需求分析與總體框架
隨著網(wǎng)絡(luò)的快速發(fā)展,客戶(hù)訪(fǎng)問(wèn)數(shù)量越來(lái)越大,對(duì)系統(tǒng)性能要求越來(lái)越高,因此Oracle數(shù)據(jù)庫(kù)實(shí)時(shí)監(jiān)控系統(tǒng)對(duì)Oracle數(shù)據(jù)庫(kù)系統(tǒng)而言十分必要,是調(diào)整優(yōu)化Oracle數(shù)據(jù)庫(kù)性能的重要子系統(tǒng)。由于訪(fǎng)問(wèn)客戶(hù)數(shù)量的增大,在原有硬件系統(tǒng)的基礎(chǔ)上,系統(tǒng)負(fù)荷量越來(lái)越大,進(jìn)而影響Oracle數(shù)據(jù)庫(kù)系統(tǒng)性能,通過(guò)Oracle數(shù)據(jù)庫(kù)實(shí)時(shí)監(jiān)控系統(tǒng)對(duì)數(shù)據(jù)庫(kù)性能進(jìn)行實(shí)時(shí)監(jiān)控,能夠?yàn)槠湔{(diào)整優(yōu)化提供支持。
Oracle數(shù)據(jù)庫(kù)監(jiān)控系統(tǒng)基于J2EE分布式構(gòu)件技術(shù)實(shí)現(xiàn),采用B/S三層架構(gòu),保證系統(tǒng)擴(kuò)展性和跨平臺(tái)性。監(jiān)控系統(tǒng)的設(shè)計(jì)要遵循“開(kāi)-閉”原則,關(guān)鍵是抽象化,實(shí)現(xiàn)對(duì)擴(kuò)展開(kāi)放。Oracle數(shù)據(jù)庫(kù)實(shí)時(shí)監(jiān)控系統(tǒng)應(yīng)用Struts開(kāi)發(fā)框架,分為客戶(hù)端、業(yè)務(wù)邏輯層、數(shù)據(jù)庫(kù)服務(wù)器層三部分。客戶(hù)端用戶(hù)界面提供可視化接口,支持IE和Applet等。業(yè)務(wù)邏輯層將數(shù)據(jù)訪(fǎng)問(wèn)和業(yè)務(wù)流程控制分開(kāi),前端是遠(yuǎn)程方法調(diào)用服務(wù)器、Servlet/JSP等應(yīng)用,后臺(tái)是數(shù)據(jù)采樣過(guò)程。數(shù)據(jù)庫(kù)服務(wù)器層負(fù)責(zé)數(shù)據(jù)庫(kù)管理,并相應(yīng)應(yīng)用服務(wù)器的數(shù)據(jù)請(qǐng)求。
(2)模塊設(shè)計(jì)
Oracle數(shù)據(jù)庫(kù)實(shí)時(shí)監(jiān)控系統(tǒng)功能模塊設(shè)計(jì)主要涉及模塊獨(dú)立和信息隱藏兩方面,實(shí)現(xiàn)參數(shù)配置、報(bào)警模塊、數(shù)據(jù)訪(fǎng)問(wèn)、數(shù)據(jù)采集功能。數(shù)據(jù)采集主要包括以下五個(gè)部分:
數(shù)據(jù)庫(kù)預(yù)覽:實(shí)現(xiàn)對(duì)后臺(tái)數(shù)據(jù)庫(kù)性能指標(biāo)的概覽,比如CPU和內(nèi)存使用情況、進(jìn)程以及磁盤(pán)存儲(chǔ)、SGA等信息;
性能參數(shù)指標(biāo)監(jiān)控:監(jiān)控主要性能指標(biāo)包括排序區(qū)情況、重做日志活動(dòng)、字典高速緩存命中率、緩沖區(qū)命中率、回滾段、庫(kù)高速緩存命中率等。性能指標(biāo)監(jiān)控處理流程為“監(jiān)控獲取性能參數(shù)值→與標(biāo)準(zhǔn)值比較→判斷是否超過(guò)閾值→報(bào)警并給出優(yōu)化建議→存儲(chǔ)參數(shù)值”;
存儲(chǔ)指標(biāo)監(jiān)控:目標(biāo)對(duì)象為Oracle數(shù)據(jù)庫(kù)存儲(chǔ)動(dòng)態(tài),因此監(jiān)控性能指標(biāo)包括SGA分配、數(shù)據(jù)文件、表空間等常用項(xiàng)目;
數(shù)據(jù)庫(kù)問(wèn)題管理:DBA實(shí)現(xiàn)對(duì)Oracle數(shù)據(jù)庫(kù)常規(guī)問(wèn)題的檢查,包括有問(wèn)題的SQL、文件I/O、等待事件和鎖表信息;
對(duì)象管理:包括SGA、索引、數(shù)據(jù)庫(kù)表、同義詞、序列、視圖等。
(3)數(shù)據(jù)庫(kù)設(shè)計(jì)
為減輕Oracle數(shù)據(jù)庫(kù)中監(jiān)控系統(tǒng)對(duì)整個(gè)系統(tǒng)的影響,監(jiān)控系統(tǒng)的數(shù)據(jù)庫(kù)單獨(dú)存放系統(tǒng)數(shù)據(jù)和歷史性能數(shù)據(jù),要求具備快速讀取、安全存放能力。監(jiān)控系統(tǒng)數(shù)據(jù)設(shè)計(jì)需遵循標(biāo)準(zhǔn)和規(guī)范化原則,考慮如下內(nèi)容:數(shù)據(jù)結(jié)構(gòu)要符合規(guī)范,是業(yè)務(wù)處理邏輯更清晰;對(duì)數(shù)據(jù)操作應(yīng)盡量簡(jiǎn)化,避免過(guò)多的表連續(xù)等關(guān)聯(lián)操作;對(duì)相關(guān)聯(lián)的表添加約束條件,簡(jiǎn)化程序?qū)?shù)值處理的流程。
以監(jiān)控對(duì)象為中心,設(shè)計(jì)一個(gè)目標(biāo)實(shí)體作為各種待監(jiān)控目標(biāo)的主表,核心對(duì)象的表主要包括Target目錄表、數(shù)據(jù)庫(kù)目標(biāo)表、主機(jī)目標(biāo)表、監(jiān)控項(xiàng)目表、報(bào)警閾值表、實(shí)時(shí)整數(shù)監(jiān)控?cái)?shù)據(jù)表、歷史整數(shù)監(jiān)控?cái)?shù)據(jù)表、系統(tǒng)用戶(hù)表、系統(tǒng)資源配置表等。
在數(shù)據(jù)庫(kù)配置中,所有表及相關(guān)索引在服務(wù)器端程序初始化配置時(shí)創(chuàng)建,通過(guò)編輯sysDB.config文件中的數(shù)據(jù)庫(kù)配置參數(shù),即可在調(diào)用initSysDB.sh腳本時(shí)通過(guò)讀取sysDB.config文件中參數(shù)自動(dòng)在系統(tǒng)數(shù)據(jù)庫(kù)中創(chuàng)建系統(tǒng)數(shù)據(jù)庫(kù)中相關(guān)對(duì)象。sysDB.config文件中主要參數(shù)賦值可根據(jù)實(shí)際系統(tǒng)數(shù)據(jù)庫(kù)創(chuàng)建情況進(jìn)行修改。在配置系統(tǒng)數(shù)據(jù)庫(kù)用戶(hù)時(shí)先創(chuàng)建用戶(hù),并賦予其connect,resource權(quán)限。在Oracle監(jiān)控系統(tǒng)數(shù)據(jù)庫(kù)中創(chuàng)建添加、刪除和查詢(xún)PLSQL存儲(chǔ)過(guò)程,充分發(fā)揮數(shù)據(jù)庫(kù)對(duì)數(shù)據(jù)的處理能力。
(4)監(jiān)控系統(tǒng)功能實(shí)現(xiàn)
從Oracle數(shù)據(jù)庫(kù)監(jiān)控系統(tǒng)運(yùn)行的流程設(shè)計(jì)可知,監(jiān)控功能的實(shí)現(xiàn)需要目標(biāo)端程序和服務(wù)器端程序共同協(xié)作才能完成。程序使用DBTarget對(duì)象定義了被監(jiān)控的目標(biāo)數(shù)據(jù)庫(kù),ServerTarget對(duì)象定義了被監(jiān)控的目標(biāo)主機(jī)。在ServerTarget類(lèi)和DBTarget類(lèi)中均通過(guò)Monit()方法完成對(duì)目標(biāo)端操作哦系統(tǒng)層監(jiān)控參數(shù)和數(shù)據(jù)庫(kù)實(shí)例的監(jiān)控?cái)?shù)據(jù)收集。
目標(biāo)端操作系統(tǒng)狀態(tài)監(jiān)控程序流程為:收集Oracle數(shù)據(jù)庫(kù)系統(tǒng)運(yùn)行數(shù)據(jù)→與服務(wù)器程序建立通信→數(shù)據(jù)傳輸→是否更新監(jiān)控參數(shù)→更新收集參數(shù)→是否停止監(jiān)控→結(jié)束。
目標(biāo)Oracle數(shù)據(jù)庫(kù)狀態(tài)監(jiān)控流程:連接Oracle數(shù)據(jù)庫(kù)→訪(fǎng)問(wèn)目標(biāo)Oracle數(shù)據(jù)庫(kù)→收集目標(biāo)Oracle數(shù)據(jù)庫(kù)運(yùn)行數(shù)據(jù)→與服務(wù)器建立通信→數(shù)據(jù)傳輸→是否更新監(jiān)控參數(shù)→更新收集參數(shù)→是否停止監(jiān)控→結(jié)束。
在完成監(jiān)控系統(tǒng)功能流程后,確定數(shù)據(jù)庫(kù)信息獲取的實(shí)現(xiàn)方式,包括成員函數(shù),然后實(shí)現(xiàn)表空間監(jiān)控,最后設(shè)計(jì)系統(tǒng)人機(jī)交互界面,最終完成監(jiān)控系統(tǒng)。
參考文獻(xiàn):
[1] 劉夢(mèng)甜.Oracle數(shù)據(jù)庫(kù)性能監(jiān)控與分析系統(tǒng)設(shè)計(jì)[J].信息技術(shù)與信息化,2017(4).
[2] 黃杰生.基于ORACLE的數(shù)據(jù)庫(kù)性能優(yōu)化設(shè)計(jì)[J].電子技術(shù)與軟件工程,2018(10).
[3] 楊瑩.基于Oracle數(shù)據(jù)庫(kù)大數(shù)據(jù)的檢索優(yōu)化分析與設(shè)計(jì)[J].數(shù)碼世界,2017(4).
[4] 余欽泉.ORACLE數(shù)據(jù)庫(kù)的運(yùn)行狀況管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].廈門(mén)大學(xué),2016.
【通聯(lián)編輯:唐一東】