黃碧雄
【摘要】 隨著Oracle數(shù)據(jù)庫(kù)市場(chǎng)占有率的不斷提高,基于Oracle數(shù)據(jù)庫(kù)的應(yīng)用系統(tǒng)所表現(xiàn)出來(lái)的性能問(wèn)題越來(lái)越被IT管理人員所關(guān)注,因此有必要針對(duì)Oracle數(shù)據(jù)庫(kù)的性能優(yōu)化和監(jiān)控進(jìn)行深入研究。本文主要介紹了Oracle數(shù)據(jù)庫(kù)性能的評(píng)價(jià)指標(biāo),分析影響Oracle數(shù)據(jù)庫(kù)系統(tǒng)性能的主要因素,以及對(duì)數(shù)據(jù)庫(kù)進(jìn)行性能監(jiān)控及性能調(diào)優(yōu)的方法。
【關(guān)鍵詞】 ORACLE數(shù)據(jù)庫(kù) 性能優(yōu)化 性能監(jiān)控
一、引言
Oracle數(shù)據(jù)庫(kù)作為廣泛應(yīng)用于企業(yè)系統(tǒng)開(kāi)發(fā)的關(guān)系型數(shù)據(jù)庫(kù),已經(jīng)成為企業(yè)信息化建設(shè)的重要基礎(chǔ)平臺(tái)。對(duì)Oracle數(shù)據(jù)庫(kù)的不合理配置嚴(yán)重影響企業(yè)應(yīng)用系統(tǒng)的性能及業(yè)務(wù)開(kāi)展。因此實(shí)施Oracle數(shù)據(jù)庫(kù)性能優(yōu)化和性能監(jiān)控,對(duì)提高基于Oracle數(shù)據(jù)庫(kù)的系統(tǒng)穩(wěn)定、高效運(yùn)行和市場(chǎng)占用率都有重要的作用。
二、Oracle數(shù)據(jù)庫(kù)系統(tǒng)性能評(píng)價(jià)指標(biāo)
對(duì)Oracle數(shù)據(jù)庫(kù)的性能優(yōu)化,其目標(biāo)是最大限度地提高數(shù)據(jù)庫(kù)單位時(shí)間內(nèi)的數(shù)據(jù)吞吐率,同時(shí)將響應(yīng)時(shí)間降到最小,提高應(yīng)用系統(tǒng)的體驗(yàn)效果。
硬件環(huán)境、網(wǎng)絡(luò)環(huán)境、業(yè)務(wù)模型等基礎(chǔ)環(huán)境的不同,影響著Oracle數(shù)據(jù)庫(kù)系統(tǒng)的性能,而且在使用過(guò)程中不同的應(yīng)用程序、體系結(jié)構(gòu)、服務(wù)器等具體情況也對(duì)Oracle數(shù)據(jù)庫(kù)的性能有不同程度的影響。
1、Oracle數(shù)據(jù)庫(kù)吞吐量。吞吐量是指單位時(shí)間內(nèi)Oracle數(shù)據(jù)庫(kù)處理SQL語(yǔ)句的數(shù)量。Oracle數(shù)據(jù)庫(kù)性能優(yōu)化主要就是為了增加數(shù)據(jù)庫(kù)的吞吐量。
2、 Oracle數(shù)據(jù)庫(kù)響應(yīng)時(shí)間。Oracle數(shù)據(jù)庫(kù)的響應(yīng)時(shí)間是指用戶從提交SQL語(yǔ)句開(kāi)始到接收查詢結(jié)果集的第一行所需要的時(shí)間,Oracle數(shù)據(jù)庫(kù)的響應(yīng)時(shí)間一般以毫秒或者秒為單位進(jìn)行衡量。
3、Oracle數(shù)據(jù)庫(kù)命中率。Oracle用戶進(jìn)程所需的所有數(shù)據(jù)都是經(jīng)過(guò)緩沖區(qū)高速緩存來(lái)存取的[1]。
4、 Oracle數(shù)據(jù)庫(kù)內(nèi)存使用情況。Oracle數(shù)據(jù)庫(kù)對(duì)內(nèi)存的使用情況主要體現(xiàn)在正常運(yùn)行過(guò)程中對(duì)共享內(nèi)存、永久內(nèi)存和實(shí)時(shí)內(nèi)存的分配使用上。
5、磁盤(pán)I/0(磁盤(pán)讀寫(xiě))。磁盤(pán)的I/O操作主要是完成數(shù)據(jù)庫(kù)數(shù)據(jù)的存儲(chǔ)和讀取,耗費(fèi)Oracle數(shù)據(jù)庫(kù)的最大開(kāi)銷(xiāo)。通過(guò)合理的存儲(chǔ)配置可減少Oracle數(shù)據(jù)庫(kù)磁盤(pán)I/O操作,有利于提高Oracle數(shù)據(jù)庫(kù)的性能。
三、Oracle數(shù)據(jù)庫(kù)性優(yōu)化的主要方面
3.1調(diào)整與優(yōu)化數(shù)據(jù)庫(kù)設(shè)計(jì)
Oracle數(shù)據(jù)庫(kù)的設(shè)計(jì)方案是否優(yōu)化嚴(yán)重影響著后續(xù)Oracle數(shù)據(jù)庫(kù)的性能,盡管Oracle數(shù)據(jù)庫(kù)本身已經(jīng)提供了多種適合系統(tǒng)性能的調(diào)節(jié)方案,但是在開(kāi)發(fā)信息系統(tǒng)之前,最優(yōu)的Oracle數(shù)據(jù)庫(kù)設(shè)計(jì)方案仍是影響Oracle數(shù)據(jù)庫(kù)性能的關(guān)鍵。
如果Oracle數(shù)據(jù)庫(kù)設(shè)計(jì)本身具有結(jié)構(gòu)性問(wèn)題,那么后續(xù)對(duì)數(shù)據(jù)庫(kù)的優(yōu)化和調(diào)整都很難達(dá)到良好的效果,因此提高數(shù)據(jù)庫(kù)的性能應(yīng)該重視和完善Oracle數(shù)據(jù)庫(kù)設(shè)計(jì)方案。
3.2優(yōu)化應(yīng)用程序SQL語(yǔ)句
優(yōu)化SQL查詢語(yǔ)句以及調(diào)整數(shù)據(jù)庫(kù)的訪問(wèn)方法可以調(diào)高Oracle數(shù)據(jù)庫(kù)對(duì)內(nèi)存的命中率,進(jìn)而減少I(mǎi)/O操作,同時(shí)可以減少網(wǎng)絡(luò)帶寬的占用,這對(duì)完善Oracle數(shù)據(jù)庫(kù)系統(tǒng)的性能具有非常重要的意義。
3.3調(diào)整數(shù)據(jù)庫(kù)內(nèi)存分配
Oracle數(shù)據(jù)庫(kù)實(shí)例是由一組Oracle后臺(tái)進(jìn)程和SGA的一個(gè)內(nèi)存區(qū)組成,SGA暫時(shí)存放Oracle數(shù)據(jù)庫(kù)對(duì)內(nèi)存命中的數(shù)據(jù)。因此,提高SGA的使用效率可以大大提高Oracle數(shù)據(jù)庫(kù)系統(tǒng)的性能[2]。我們可以根據(jù)Oracle數(shù)據(jù)庫(kù)運(yùn)行情況重新分配SGA的大小。
3.4調(diào)整與優(yōu)化磁盤(pán)I/0
物理磁盤(pán)是用來(lái)存儲(chǔ)計(jì)算機(jī)數(shù)據(jù)的,對(duì)Oracle數(shù)據(jù)庫(kù)的讀寫(xiě)操作難免需要對(duì)物理磁盤(pán)進(jìn)行頻繁訪問(wèn),所以優(yōu)化磁盤(pán)I/O操作是提高Oracle數(shù)據(jù)庫(kù)性能的重要方面。我們可以減少磁盤(pán)資源的競(jìng)爭(zhēng)、減少I(mǎi)/O訪問(wèn)次數(shù)、合理分配數(shù)據(jù)塊的存儲(chǔ)大小,減少磁盤(pán)操作,降低Oracle數(shù)據(jù)庫(kù)系統(tǒng)開(kāi)銷(xiāo)。
四、Oracle數(shù)據(jù)庫(kù)性能監(jiān)控
4.1性能參數(shù)指標(biāo)監(jiān)控
Oracle數(shù)據(jù)庫(kù)性能參數(shù)指標(biāo)監(jiān)控只要針對(duì)Cache命中率、排序表空間、回滾段等關(guān)鍵指標(biāo)最新?tīng)顟B(tài)進(jìn)行實(shí)施跟蹤監(jiān)測(cè)。性能參數(shù)監(jiān)控主要是完成監(jiān)控?cái)?shù)據(jù)信息與標(biāo)準(zhǔn)數(shù)據(jù)進(jìn)行對(duì)比,進(jìn)而完成對(duì)數(shù)據(jù)庫(kù)各項(xiàng)性能指標(biāo)的監(jiān)控。
4.2系統(tǒng)信息監(jiān)控
系統(tǒng)信息監(jiān)控主要通過(guò)GetHostInfo系統(tǒng)類(lèi)來(lái)實(shí)現(xiàn),主要通過(guò)以下成員函數(shù)獲取系統(tǒng)性能信息[3]。(1)GetPerforinanceInfo()獲取數(shù)據(jù)庫(kù)系統(tǒng)服務(wù)器主機(jī)的CPU和內(nèi)存詳細(xì)使用情況。(2) GetProcessInfo()獲取數(shù)據(jù)庫(kù)系統(tǒng)服務(wù)器上每個(gè)進(jìn)程的進(jìn)程名、進(jìn)程的CPU占有量、進(jìn)程的內(nèi)存占有量、進(jìn)程ID以及活動(dòng)的進(jìn)程數(shù)等進(jìn)程信息。(3) GetNetwork()獲取數(shù)據(jù)庫(kù)系統(tǒng)服務(wù)器的網(wǎng)絡(luò)I/O。
4.3表空間監(jiān)控
表空間監(jiān)控主要是對(duì)Oracle數(shù)據(jù)庫(kù)系統(tǒng)內(nèi)表空間的信息獲取、匯總以及表空間限額預(yù)警,如通過(guò)綜合分析表空間的占有和分布情況,再根據(jù)預(yù)警規(guī)則,當(dāng)表空間使用超過(guò)設(shè)定限額時(shí)可以向管理員發(fā)出預(yù)警。
五、優(yōu)化與監(jiān)控實(shí)例分析
為了評(píng)價(jià)Oracle數(shù)據(jù)庫(kù)優(yōu)化監(jiān)控的有效性,本節(jié)通過(guò)對(duì)“項(xiàng)目管理系統(tǒng)”(本廠一套業(yè)務(wù)系統(tǒng))的測(cè)試,觀察及記錄優(yōu)化性能參數(shù)前后對(duì)業(yè)務(wù)系統(tǒng)的影響。
5.1優(yōu)化與監(jiān)控測(cè)試目的
Oracle數(shù)據(jù)庫(kù)優(yōu)化與監(jiān)控的目的是為了在不影響正常的業(yè)務(wù)系統(tǒng)及數(shù)據(jù)庫(kù)性能的前提下,降低Oracle數(shù)據(jù)庫(kù)對(duì)磁盤(pán)的訪問(wèn)次數(shù)及響應(yīng)時(shí)間。
5.2優(yōu)化與監(jiān)控測(cè)試環(huán)境
5.3數(shù)據(jù)庫(kù)優(yōu)化測(cè)試
通過(guò)調(diào)整內(nèi)存,優(yōu)化磁盤(pán)I/O操作和提高SQL語(yǔ)句的使用效率等方面的調(diào)整優(yōu)化,Oracle數(shù)據(jù)庫(kù)的相應(yīng)時(shí)間逐漸減少,性能得到顯著提高。
5.4數(shù)據(jù)庫(kù)性能測(cè)試
由圖1、圖2得出,Oracle數(shù)據(jù)庫(kù)監(jiān)控功能對(duì)服務(wù)器性能影響較少。針對(duì)本系統(tǒng)的監(jiān)控而言,Oracle數(shù)據(jù)庫(kù)監(jiān)控模塊的時(shí)間間隔是10秒,所以業(yè)務(wù)系統(tǒng)CPU、內(nèi)存的利用率在監(jiān)控功能啟動(dòng)后,其性能采集點(diǎn)在時(shí)間上會(huì)有1~2%的提升,這在生產(chǎn)環(huán)境中是可以接受的。
六、結(jié)束語(yǔ)
Oracle數(shù)據(jù)庫(kù)因?yàn)槠鋸?qiáng)大的功能,在國(guó)內(nèi)外的企業(yè)系統(tǒng)中得到廣泛的應(yīng)用,也有越來(lái)越多的IT管理人員重視和參與到數(shù)據(jù)庫(kù)的性能優(yōu)化中來(lái)。Oracle數(shù)據(jù)庫(kù)的性能優(yōu)化涉及面廣,優(yōu)化和調(diào)整的過(guò)程需要不斷地摸索和總結(jié)。只有在把握好影響Oracle數(shù)據(jù)庫(kù)性能指標(biāo)的關(guān)鍵因素基礎(chǔ)上,結(jié)合監(jiān)控系統(tǒng),針對(duì)不同因素進(jìn)行相應(yīng)的優(yōu)化調(diào)整,才能真正將數(shù)據(jù)庫(kù)性能提高到一定高度。
參 考 文 獻(xiàn)
[1] 郭敏, 郭靖. Oracle 10G數(shù)據(jù)庫(kù)性能優(yōu)化的研究[J]. 武漢理工大學(xué)學(xué)報(bào), 2005, (10):103-105.
[2] 王振鐸, 王振輝. 基于Oracle9i的數(shù)據(jù)庫(kù)性能優(yōu)化策略研究[J]. 計(jì)算機(jī)系統(tǒng)應(yīng)用, 2006, (6):76-79.
[3] 卞榮兵, 張迎春, 趙遠(yuǎn)東. 基于ORACLE數(shù)據(jù)庫(kù)性能優(yōu)化的研究[J]. 計(jì)算機(jī)系統(tǒng)應(yīng)用, 2002, (9).