Oracle性能調(diào)優(yōu)可以說是Oracle數(shù)據(jù)庫管理系統(tǒng)當(dāng)中的重要和高端技術(shù),是一個數(shù)據(jù)庫技術(shù)精英應(yīng)該具備的一項技能。中培偉業(yè)的賈老師是該領(lǐng)域的權(quán)威專家,他認(rèn)為Oracle是一個高性能數(shù)據(jù)庫軟件。用戶可以通過參數(shù)的調(diào)整,達到性能的優(yōu)化。對于數(shù)據(jù)庫性能調(diào)優(yōu)的途徑,賈老師認(rèn)為目前主要有兩種:一種是數(shù)據(jù)庫管理員通過對系統(tǒng)參數(shù)的調(diào)整達到優(yōu)化的目的;二是開發(fā)人員通過對應(yīng)用程序的優(yōu)化達到調(diào)整的目的。
在這兩種途徑當(dāng)中,通過系統(tǒng)參數(shù)的調(diào)整達到性能調(diào)優(yōu)是目前Oracle數(shù)據(jù)庫性能調(diào)優(yōu)的最流行的選擇。據(jù)賈老師介紹,通過系統(tǒng)參數(shù)的調(diào)整達到性能調(diào)優(yōu)技術(shù)的主要由以下幾個部分組成:
調(diào)整內(nèi)存分配
系統(tǒng)全局區(qū)(SGA)是一個分配給Oracle 包含Oracle 數(shù)據(jù)庫實例控制信息的內(nèi)存段。SGA的大小對系統(tǒng)性能的影響極大,其缺省參數(shù)設(shè)置只適用于配置很低的計算機,不適應(yīng)收入系統(tǒng)現(xiàn)有設(shè)備的需要。這些參數(shù)若不作調(diào)整,會對系統(tǒng)資源造成巨大浪費。就收入系統(tǒng)的Alpha 1200而言,SGA的大小以160兆左右為宜。
初始化參數(shù)文件中的一些參數(shù)對SGA的大小有決定性的影響。參數(shù)DB-BLOCK-BUFFERS(SGA中存儲區(qū)高速緩存的緩沖區(qū)數(shù)目),參數(shù)SHARED-POOL-SIZE(分配給共享SQL區(qū)的字節(jié)數(shù)),是SGA大小的主要影響者。
DB-BLOCK-BUFFERS參數(shù)是SGA大小和數(shù)據(jù)庫性能的最重要的決定因素。該值較高,可以提高系統(tǒng)的命中率,減少I/O。每個緩沖區(qū)的大小等于參數(shù)DB-BLOCK-SIZE的大小。Oracle數(shù)據(jù)庫塊以字節(jié)表示大小。
Oracle SGA區(qū)共享池部分由庫高速緩存、字典高速緩存及其他一些用戶和服務(wù)器會話信息組成,共享池是最大的消耗成分。調(diào)整SGA區(qū)各個結(jié)構(gòu)的大小,可以極大地提高系統(tǒng)的性能。
調(diào)整Library Cache
庫高速緩存(Library Cache)中包含私用和共享SQL區(qū)和PL/SQL區(qū)。調(diào)整SGA的重要問題是確保庫高速緩存足夠大,以使Oracle能在共享池中保持分析和執(zhí)行語句,提高語查詢V$LIBRARYCACHE 數(shù)據(jù)字典視圖句分析和執(zhí)行效率,降低資源消耗。通過比較Library Cache的命中率來決定它的大小。(其中,pins表示高速緩存命中率,reloads表示高速緩存失敗)
SQL〉SELECT SUM(pins),SUM(reloads) FROM v$librarycache;
如果sum(reload)/sum(pins)≈0,說明Library Cache的命中率比較合適,若大于1,則需要增加共享池(SHARED-POOL-SIZE)的大小(在初始化參數(shù)文件中)。
調(diào)整數(shù)據(jù)字典高速緩存(Dictionary Cache)
數(shù)據(jù)字典高速緩存包括了有關(guān)數(shù)據(jù)庫的結(jié)構(gòu)、用戶、實體信息等。數(shù)據(jù)字典的命中率對系統(tǒng)有很大的影響。命中率的計算中,getmisses 表示失敗次數(shù),gets表示成功次數(shù)。
查詢V$ROWCACHE表:
如果該值>90%,說明命中率合適。否則,應(yīng)增大共享池的大小。
調(diào)整數(shù)據(jù)庫緩沖區(qū)高速緩存
Oracle 在運行期間向數(shù)據(jù)庫高速緩存讀寫數(shù)據(jù),高速緩存命中表示信息已在內(nèi)存中,高速緩存失敗意味著Oracle必需進行磁盤I/O。保持高速緩存失敗率最小的關(guān)鍵是確保高速緩存的大小。初始化參數(shù)DB-BLOCK-BUFFERS控制數(shù)據(jù)庫緩沖區(qū)高速緩存的大小。可通過查詢V$SYSSTAT命中率,以確定是否應(yīng)當(dāng)增加DB-BLOCK-BUFFERS的值。
通過查詢結(jié)果
命中率=1-physical reads/(dbblock gets+consistent gets)
如果命中率<0.6~0.7,則應(yīng)增大DB-BLOCK-BUFFERS。
調(diào)整磁盤I/O
磁盤I/O是系統(tǒng)性能的瓶頸,解決好磁盤I/O,可明顯提高性能。通過查詢V$FILESTAT可以知道每個物理文件的使用頻率(phyrds表示每個數(shù)據(jù)文件讀的次數(shù),phywrts表示每個數(shù)據(jù)文件寫的次數(shù))
對于使用頻率較高的物理文件,可以采用以下策略:
將I/O盡可能平均分配在盡可能多的磁盤上。
為表和索引建立不同的表空間。
將數(shù)據(jù)文件與重做日志文件分離在不同的磁盤上。
減少不經(jīng)Oracle SERVER的磁盤I/O。
調(diào)整競爭
當(dāng)多個進程對相同的資源發(fā)出申請時,產(chǎn)生競爭。
修改Process參數(shù)
該參數(shù)定義可以同時連接到Oracle數(shù)據(jù)庫的最大進程數(shù),缺省值為50。注意,Oracle的后臺進程也包括在此數(shù)目中,建議將該值改為200。
減少調(diào)度進程的競爭
減少調(diào)度進程的競爭,通過查詢v$dispatcher表來判定調(diào)度進程的競爭
如果某種協(xié)議忙的比率超過50%,應(yīng)增加MTS-DISPATCHERS的值。
減少多線程服務(wù)進程競爭
首先查詢V$SYSSTAT表判定是否發(fā)生多線程服務(wù)進程競爭:
如果共享服務(wù)進程數(shù)量已達到初始化參數(shù)文件中MTS-MAX-SERVERS指定的最大值,但應(yīng)用運行時,平均請求等待時間仍持續(xù)增長,那么,應(yīng)加大MTS-MAX-SERVERS的值。
減少重做日志緩沖區(qū)競爭
通過查詢V$SYSSTAT表判定redo log 文件緩沖區(qū)是否足夠。
此處value的值應(yīng)接近于0,否則,應(yīng)增大初始化參數(shù)文件的LOG-BUFFEQS的值。
減少回退段競爭
回退段對性能也有影響,根據(jù)事物大小情況來分配合適的回退段。
首先判定回退段的數(shù)量能否滿足系統(tǒng)運行的需要:
查詢V$WAITSTAT表與V$SYSSTAT表
如果任何一個class/sum(value)>10%,那么考慮增加回退段。回退段的數(shù)量一般按如下規(guī)律設(shè)定:
用戶數(shù) 回退段個數(shù)
n<164
16<n<328
32<=n n/4 但不超過50</n<328
減少Free List競爭
當(dāng)多個進程同時向一個表中插入數(shù)據(jù)時,產(chǎn)生Free List競爭。
如果class/sum(value)>1%,則應(yīng)增加該表的Free List 的值。
想了解更多IT資訊,請訪問中培偉業(yè)官網(wǎng):中培偉業(yè)