摘要:Oracle數(shù)據(jù)庫系統(tǒng)性能調(diào)整是一個系統(tǒng)工程,涉及的方面很多。在實際應(yīng)用中,應(yīng)根據(jù)具體情況采用適當?shù)膬?yōu)化策略。該文從性能優(yōu)化的基本概念出發(fā),分析了數(shù)據(jù)庫系統(tǒng)性能評價指標,總結(jié)了數(shù)據(jù)庫性能優(yōu)化的主要方面。
關(guān)鍵詞:Oracle;數(shù)據(jù)庫;性能;優(yōu)化
中圖分類號:TP311 文獻標識碼:A 文章編號:1009-3044(2008)29-0289-02
The Adjustment and Optimization of the Oracle Database Performance
ZHANG Jun-feng
(Liaoning University of International Business and Economics,DaLian 116052,China)
Abstract: The Oracle database system performance adjustment is a systems engineering,involves variously.In practical application,we should use the suitable optimized strategy according to the special details. This article first elaborated the basic concept of performance optimizes,next has analyzed the performance appraisal target of database system,finally summarized the principal aspects which the database performance optimizes.
Key words: Oracle; database; performance; optimization
1 引言
Oracle作為一個功能極其強大且靈活的關(guān)系型數(shù)據(jù)庫系統(tǒng),以其高可靠性、高安全性,可兼容性,廣泛應(yīng)用于各大企業(yè)。在一個數(shù)據(jù)庫應(yīng)用系統(tǒng)的設(shè)計與實施過程中,數(shù)據(jù)庫性能優(yōu)化的好壞會影響到整個應(yīng)用系統(tǒng)能否正常運轉(zhuǎn)。如何調(diào)整服務(wù)器和數(shù)據(jù)庫性能,如何使有限的計算機系統(tǒng)資源為更多的用戶服務(wù),就顯得非常重要。
2 性能調(diào)整與優(yōu)化概述
性能調(diào)整通過優(yōu)化應(yīng)用程序、修改系統(tǒng)參數(shù)、改變系統(tǒng)配置來改變系統(tǒng)性能。性能調(diào)整包括對硬件配置、操作系統(tǒng)與關(guān)系型數(shù)據(jù)庫管理系統(tǒng)配置,以及對訪問這些組件的應(yīng)用的詳細分析與優(yōu)化。在一個系統(tǒng)的生命周期內(nèi),對系統(tǒng)進行調(diào)整,想利用較少的人力、物力而能夠收到較好的收益的話,最好在系統(tǒng)的設(shè)計和開發(fā)期內(nèi)進行。
性能優(yōu)化是指進行有目的地調(diào)整組件以改善性能,使得數(shù)據(jù)庫的吞吐量最大限度地增加,相應(yīng)的響應(yīng)時間達到最小化。數(shù)據(jù)庫性能優(yōu)化的基本原則是:通過盡可能少的磁盤訪問獲得所需要的數(shù)據(jù)。對于數(shù)據(jù)庫性能的優(yōu)化,最好的時期是在系統(tǒng)的設(shè)計和開發(fā)階段,盡量避免在一系統(tǒng)成型之后再進行優(yōu)化。在設(shè)計階段進行數(shù)據(jù)庫性能優(yōu)化的成本最低,收益最大。
3 數(shù)據(jù)庫系統(tǒng)性能評價指標
數(shù)據(jù)庫系統(tǒng)性能會隨著環(huán)境的不同而有差異,并受應(yīng)用程序、體系結(jié)構(gòu)和資源、服務(wù)器以及并發(fā)活動的具體情況影響。數(shù)據(jù)庫系統(tǒng)性能的判定標準依賴于性能衡量的研究。通常認為評價oracle數(shù)據(jù)庫性能的指標主要有系統(tǒng)吞吐量、數(shù)據(jù)庫用戶響應(yīng)時間、數(shù)據(jù)庫命中率、內(nèi)存使用情況以及所需的磁盤I/O量。
3.1 系統(tǒng)吞吐量
吞吐量是指單位時間內(nèi)數(shù)據(jù)庫完成的SQL語句數(shù)目,以每秒鐘的事務(wù)量(tPs)表示。對某些特定的系統(tǒng)配置而言,系統(tǒng)調(diào)整最重要的目的可能就是對系統(tǒng)吞吐量的調(diào)整。
3.2 用戶響應(yīng)時間
響應(yīng)時間是指用戶從提交SQL語句開始到獲得結(jié)果集的第一行所需要的時間,是應(yīng)用做出反應(yīng)的時間,以毫秒或秒表示。響應(yīng)時間通常也稱為用戶收到查詢正被處理的直觀確認時刻所感知的時間長度。
在任何一個系統(tǒng)中,吞吐量和響應(yīng)時間作為調(diào)整目標通常是互相對立的。若響應(yīng)時間長,吞吐量或許高;吞吐量低,響應(yīng)時間或許短。
3.3 數(shù)據(jù)庫命中率
oracle用戶進程所需的所有數(shù)據(jù)都是經(jīng)過緩沖區(qū)高速緩存來存取的。用戶對數(shù)據(jù)的需求能否在內(nèi)存中得到滿足,給出快速的響應(yīng),可用緩沖區(qū)高速緩存命中率來衡量。
3.4 內(nèi)存使用情況
內(nèi)存的使用情況主要體現(xiàn)在可共享內(nèi)存、永久性內(nèi)存和運行時內(nèi)存這三者的分配使用上。
3.5 磁盤I/O
數(shù)據(jù)庫中發(fā)生的每個動作幾乎都將產(chǎn)生某種類型的I/O活動,該活動可以是邏輯的,也可以是物理的。通過降低不必要的I/O開銷可以增加用戶任務(wù)可獲得的吞吐量,縮短用戶響應(yīng)時間。
4 數(shù)據(jù)庫性能優(yōu)化的主要方面
無論哪一個數(shù)據(jù)庫管理系統(tǒng)都會出現(xiàn)數(shù)據(jù)庫運行效率問題,要使數(shù)據(jù)庫的性能達到最大化,主要從操作系統(tǒng)和硬件性能、數(shù)據(jù)庫結(jié)構(gòu)、oracle資源配置、Oracle實例性能、SQL語句執(zhí)行等方面進行,這些方面是相互依賴的。
4.1 調(diào)整與優(yōu)化數(shù)據(jù)庫設(shè)計
要在良好的Oracle方案中實現(xiàn)最優(yōu)的性能,最關(guān)鍵的是要有一個很好的數(shù)據(jù)庫設(shè)計方案。如果數(shù)據(jù)庫設(shè)計本身就有問題特別是結(jié)構(gòu)設(shè)計,那么再怎么對數(shù)據(jù)庫進行調(diào)整和優(yōu)化都達不到很好的效果。因此提高數(shù)據(jù)庫應(yīng)用系統(tǒng)的性能首先應(yīng)從數(shù)據(jù)庫設(shè)計開始。
數(shù)據(jù)庫設(shè)計分為邏輯設(shè)計和物理設(shè)計。邏輯設(shè)計包括使用數(shù)據(jù)庫組件為業(yè)務(wù)需求和數(shù)據(jù)建模,而無須考慮如何或在哪里物理存儲這些數(shù)據(jù)。物理設(shè)計包括將邏輯設(shè)計映射到物理媒體上、利用可用的硬件和軟件功能盡可能快地對數(shù)據(jù)進行物理訪問和維護,包括索引技術(shù)。邏輯設(shè)計主要是消除冗余數(shù)據(jù),提高數(shù)據(jù)的吞吐速度,保證數(shù)據(jù)的完整性,但對于多表之間關(guān)聯(lián)查詢,將會影Oracle數(shù)據(jù)庫性能優(yōu)化研究響其性能。因此,在物理設(shè)計時需要折中考慮,根據(jù)業(yè)務(wù)規(guī)則和關(guān)聯(lián)表的數(shù)據(jù)量大小、數(shù)據(jù)項訪問頻度,對關(guān)聯(lián)查詢頻繁的數(shù)據(jù)表適當提高數(shù)據(jù)冗余設(shè)計。
4.2 優(yōu)化應(yīng)用程序
根據(jù)統(tǒng)計,對網(wǎng)絡(luò)、硬件、操作系統(tǒng)、數(shù)據(jù)庫參數(shù)進行優(yōu)化所獲得的性能提升,全部加起來只占數(shù)據(jù)庫系統(tǒng)性能提升的40%左右,其余的60%系統(tǒng)性能提升來自對應(yīng)用程序的優(yōu)化。對應(yīng)用程序進行優(yōu)化通??蓮脑创a和SQL語句這兩個方面進行。
SQL語句在編寫過程中的運用可以大大優(yōu)化數(shù)據(jù)庫的性能。在SQL語句編寫過程中一般應(yīng)遵循以下原則:
1) 用NOT EXISTS代替NOT IN;
2) 使用帶有提示的NOT EXISTS或NOT IN代替MINUS;
3) 使用UNION ALL 代替UNION;
4) 使用WHERE代替HAVING;
5) 避免在WHERE子句中對索引子段施加函數(shù)。
另外,在SQL語句運用中,要充分利用Oracle提供的觸發(fā)器、存儲過程等機制來不斷的優(yōu)化數(shù)據(jù)庫的性能。盡可能地把數(shù)據(jù)庫的一些操作放在數(shù)據(jù)庫服務(wù)器上進行,這樣可以減少網(wǎng)絡(luò)傳輸帶來的瓶頸。避免將數(shù)據(jù)庫服務(wù)器的數(shù)據(jù)通過網(wǎng)絡(luò)傳到客戶機,然后在客戶機上進行一系列的操作之后再通過網(wǎng)絡(luò)傳輸?shù)綌?shù)據(jù)庫服務(wù)器上,使數(shù)據(jù)庫性能大大降低。
4.3 調(diào)整數(shù)據(jù)庫內(nèi)存分配
每一個Oracle實例是由一組Oracle后臺進程和SGA(系統(tǒng)全局區(qū))的一個內(nèi)存區(qū)組成的。用戶進程對這個內(nèi)存區(qū)發(fā)送事務(wù),并且以這里作為調(diào)整緩存讀取命中的數(shù)據(jù),以實現(xiàn)加速的目的。SGA使用效率會大大影響數(shù)據(jù)庫系統(tǒng)的性能。由于SGA的缺省參數(shù)設(shè)置只適用于配置很低的計算機,因此,應(yīng)根據(jù)數(shù)據(jù)庫運行狀況重新調(diào)整SGA的大小。內(nèi)存分配是在信息系統(tǒng)運行過程中優(yōu)化配置的,應(yīng)在檢查數(shù)據(jù)庫文件的物理調(diào)整和磁盤 I/O之前進行調(diào)整。
初始化參數(shù)文件中的一些參數(shù)對SGA 的大小有決定性的影響。DB - BLOCK - BUFFERS 參數(shù)是SGA 大小和數(shù)據(jù)庫性能的最重要的決定因素。該值較高,可以提高系統(tǒng)的命中率,減少I/O。
Oracle SGA中共享池部分由庫高速緩存、字典高速緩存及其他一些用戶和服務(wù)器會話信息組成,共享池是最大的消耗成分。調(diào)整SGA各個結(jié)構(gòu)的大小,可以極大地提高系統(tǒng)的性能。
4.4 調(diào)整與優(yōu)化磁盤I/O
數(shù)據(jù)庫的數(shù)據(jù)最終要存儲在物理磁盤上。磁盤I/O操作是數(shù)據(jù)庫性能最重要的方面,它是系統(tǒng)消耗最大的oracle數(shù)據(jù)庫操作。為了避免與I/O相關(guān)的性能瓶頸,監(jiān)控磁盤I/O并對其進行調(diào)整非常重要。影響磁盤I/O的性能的主要原因有磁盤競爭、I/O次數(shù)過多和數(shù)據(jù)塊空間的分配管理。
我們可將數(shù)據(jù)文件、事務(wù)日志文件分別存放在磁盤陣列的不同磁盤上,減少對數(shù)據(jù)庫的數(shù)據(jù)文件及事務(wù)日志文件的競爭。還應(yīng)把一個應(yīng)用的表數(shù)據(jù)和索引數(shù)據(jù)分散存放不同表空間上,并且盡量把不同類型的表空間存放在不同磁盤上,這樣就消除了表數(shù)據(jù)和索引數(shù)據(jù)的磁盤競爭。從而有效地改善了服務(wù)器的磁盤I/O,提高了系統(tǒng)的性能。
4.5 配置和調(diào)整操作系統(tǒng)性能
Oracle數(shù)據(jù)庫服務(wù)器的整體性能很大程度上依賴于操作系統(tǒng)的性能,如果操作系統(tǒng)不能提供優(yōu)越的性能,那么無論怎么調(diào)整數(shù)據(jù)庫也不能發(fā)揮其應(yīng)有的性能。
實施操作系統(tǒng)級調(diào)整的主要目的是減少內(nèi)存交換和分頁,使SGA可留駐內(nèi)存。如果為Oracle分配更多的內(nèi)存需要以增加系統(tǒng)的換頁和交換為代價,那么這種方法不僅不會產(chǎn)生理想的效果,相反還會影響數(shù)據(jù)庫的性能。
1) 為Oracle規(guī)劃系統(tǒng)資源
為Oracle調(diào)整操作系統(tǒng)的目的是為實例提供足夠的資源。將計算機可用資源分配給Oracle服務(wù)器的原則是:盡可能使Oracle服務(wù)器使用資源最大化,特別在C/S中盡量讓服務(wù)器上所有資源都來運行Oracle服務(wù)。操作系統(tǒng)必須為Oracle提供以下資源:能容納SGA的足夠內(nèi)存、能容納用戶進程的足夠內(nèi)存、使操作系統(tǒng)能實現(xiàn)其自身功能的足夠內(nèi)存、使Oracle能完成其功能的足夠內(nèi)存、避免換頁和交換。如果系統(tǒng)不能提供這些內(nèi)存資源,那么就可能引起嚴重的性能問題。
2) 調(diào)整計算機系統(tǒng)中的內(nèi)存配置
多數(shù)操作系統(tǒng)使用虛似內(nèi)存來擴大內(nèi)存,它實際上屬于磁盤空間。當實際的內(nèi)存空間不能滿足應(yīng)用軟件的要求時,操作系統(tǒng)就將這部分的磁盤空間與內(nèi)存中的信息進行頁面替換,這將引起大量的磁盤I/O操作,使整個服務(wù)器的性能下降。
5 結(jié)束語
Oracle數(shù)據(jù)庫性能調(diào)整與優(yōu)化非常重要,在應(yīng)用系統(tǒng)的運行過程中,會有許多變化,需要根據(jù)實際情況,對系統(tǒng)進行適時的調(diào)整,使相關(guān)應(yīng)用的性能得到改善。由于應(yīng)用系統(tǒng)的復雜性較高,很難將參數(shù)調(diào)整到使應(yīng)用系統(tǒng)的所有環(huán)節(jié)性能達到最優(yōu)。在數(shù)據(jù)庫建立時,若能根據(jù)應(yīng)用的需要合理設(shè)計分配表空間以及存儲參數(shù)、內(nèi)存使用初始化參數(shù),對以后的數(shù)據(jù)庫性能有很大的益處。
參考文獻:
[1] 何月順,丁秋林.調(diào)整優(yōu)化Oracle9i數(shù)據(jù)庫的性能[J].計算機應(yīng)用與軟件.2004,21(6):10-11.
[2] 王曉春,趙霎,張巖.Windows平臺上Oracle數(shù)據(jù)庫的系統(tǒng)性能優(yōu)化[J].計算機工程.2004,30(09):79-81.
[3] 童有奎.淺談ORACLE數(shù)據(jù)庫系統(tǒng)性能優(yōu)化方案[J].計算機應(yīng)用,2005(3):25-26.
[4] 張韜.淺析Oracle數(shù)據(jù)庫的性能優(yōu)化[J].中國科技信息,2005(5):17.