ORACLE調優方法
Oracle是一個高效能資料庫軟體。使用者可以通過引數的調整,達到效能的優化。效能優化主要分為兩部分:
一是資料庫管理員通過對系統引數的調整達到優化的目的;
二是開發人員通過對應用程式的優化達到調整的目的。
在此,僅就係統引數的調整進行探討,而不涉及應用程式的優化。對系統引數的調整,可以分為以下幾個部分:
調整記憶體分配
系統全域性區(SGA)是一個分配給Oracle 包含Oracle 資料庫例項控制資訊的記憶體段。SGA的大小對系統效能的影響極大,其預設引數設定只適用於配置很低的計算機,不適應收入系統現有裝置的需要。這些引數若不作調整,會對系統資源造成巨大浪費。就收入系統的Alpha 1200而言,SGA的大小以160兆左右為宜。
初始化引數檔案中的一些引數對SGA的大小有決定性的影響。引數DB-BLOCK-BUFFERS(SGA中儲存區快取記憶體的緩衝區數目),引數SHARED-POOL-SIZE(分配給共享SQL區的位元組數),是SGA大小的主要影響者。
DB-BLOCK-BUFFERS引數是SGA大小和資料庫效能的最重要的決定因素。該值較高,可以提高系統的命中率,減少I/O。每個緩衝區的大小等於引數DB-BLOCK-SIZE的大小。Oracle資料庫塊以位元組表示大小。
Oracle SGA區共享池部分由庫快取記憶體、字典快取記憶體及其他一些使用者和伺服器會話資訊組成,共享池是最大的消耗成分。調整SGA區各個結構的大小,可以極大地提高系統的效能。
調整Library Cache
庫快取記憶體(Library Cache)中包含私用和共享SQL區和PL/SQL區。調整SGA的重要問題是確保庫快取記憶體足夠大,以使Oracle能在共享池中保持分析和執行語句,提高語查詢V$LIBRARYCACHE 資料字典檢視句分析和執行效率,降低資源消耗。通過比較Library Cache的命中率來決定它的大小。(其中,pins表示快取記憶體命中率,reloads表示快取記憶體失敗)
SQL〉SELECT SUM(pins),SUM(reloads) FROM v$librarycache;
如果sum(reload)/sum(pins)≈0,說明Library Cache的命中率比較合適,若大於1,則需要增加共享池(SHARED-POOL-SIZE)的大小(在初始化引數檔案中)。
調整資料字典快取記憶體(Dictionary Cache)
資料字典快取記憶體包括了有關資料庫的結構、使用者、實體資訊等。資料字典的命中率對系統有很大的影響。命中率的計算中,getmisses 表示失敗次數,gets表示成功次數。
查詢V$ROWCACHE表:
SQL>SELECT (1-(SUM(getmisses)/(SUM(gets)+SUM(getmisses))))*100FROM v$rowcache;
如果該值>90%,說明命中率合適。否則,應增大共享池的大小。
調整資料庫緩衝區快取記憶體
Oracle 在執行期間向資料庫快取記憶體讀寫資料,快取記憶體命中表示資訊已在記憶體中,快取記憶體失敗意味著Oracle必需進行磁碟I/O。保持快取記憶體失敗率最小的關鍵是確保快取記憶體的大小。初始化引數DB-BLOCK-BUFFERS控制資料庫緩衝區快取記憶體的大小。可通過查詢V$SYSSTAT命中率,以確定是否應當增加DB-BLOCK-BUFFERS的值。
SQL>SELECT name,value FROM V$SYSSTATWHERE name IN (’dbblock gets’,’consistent gets’,’physical reads’);
通過查詢結果
命中率=1-physical reads/(dbblock gets+consistent gets)
如果命中率<0.6~0.7,則應增大DB-BLOCK-BUFFERS。
調整磁碟I/O
磁碟I/O是系統效能的瓶頸,解決好磁碟I/O,可明顯提高效能。通過查詢V$FILESTAT可以知道每個物理檔案的使用頻率(phyrds表示每個資料檔案讀的次數,phywrts表示每個資料檔案寫的次數)
SQL>SELECT name,phyrds,phywrts FROM v$datafile df,v$filestat fsWHERE df.file# =fs.file#;
對於使用頻率較高的物理檔案,可以採用以下策略:
將I/O儘可能平均分配在儘可能多的磁碟上。
為表和索引建立不同的表空間。
將資料檔案與重做日誌檔案分離在不同的磁碟上。
減少不經Oracle SERVER的磁碟I/O。
調整競爭
當多個程式對相同的資源發出申請時,產生競爭。
修改Process引數
該引數定義可以同時連線到Oracle資料庫的最大程式數,預設值為50。注意,Oracle的後臺程式也包括在此數目中,建議將該值改為200。
減少排程程式的競爭
減少排程程式的競爭,通過查詢v$dispatcher表來判定排程程式的競爭
SQL>SELECT network ,sum(busy)/sum(busy)+sum(idle) FROM v$dispatcherGROUP BY network;
如果某種協議忙的比率超過50%,應增加MTS-DISPATCHERS的值。
減少多執行緒服務程式競爭
首先查詢V$SYSSTAT表判定是否發生多執行緒服務程式競爭:
SQL>SELECT DECODE(totalq,0,’No request’,wait/totalq||’hunderths of seconds’) FROM v$sysstatWHERE type=’common’;
如果共享服務程式數量已達到初始化引數檔案中MTS-MAX-SERVERS指定的最大值,但應用執行時,平均請求等待時間仍持續增長,那麼,應加大MTS-MAX-SERVERS的值。
減少重做日誌緩衝區競爭
通過查詢V$SYSSTAT表判定redo log 檔案緩衝區是否足夠。
SQL>SELECT name,value FROM v$sysstatWHERE name=’redo log space request’;
此處value的值應接近於0,否則,應增大初始化引數檔案的LOG-BUFFEQS的值。
減少回退段競爭
回退段對效能也有影響,根據事物大小情況來分配合適的回退段。
首先判定回退段的數量能否滿足系統執行的需要:
查詢V$WAITSTAT表與V$SYSSTAT表
SQL>SELECT class,count FROM v$waitstatWHERE class IN (’system undo header’,system undo block’,’undo header’,’undo block’);SQL>SELECT sum(value)FROM v$sysstat WHERE name IN (’db block gets’,’consistent gets’);
如果任何一個class/sum(value)>10%,那麼考慮增加回退段。回退段的數量一般按如下規律設定:
使用者數 回退段個數
n<164
16<328
32<=n n/4 但不超過50
減少Free List競爭
當多個程式同時向一個表中插入資料時,產生Free List競爭。
SQL>SELECT class,count FROM v$waitstatWHERE class=’free list’;SQL>SELECT sum(value)FROM v$sysstatWHERE name IN (’db block gets’,’consistent gets’);
如果class/sum(value)>1%,則應增加該表的Free List 的值。
一是資料庫管理員通過對系統引數的調整達到優化的目的;
二是開發人員通過對應用程式的優化達到調整的目的。
在此,僅就係統引數的調整進行探討,而不涉及應用程式的優化。對系統引數的調整,可以分為以下幾個部分:
調整記憶體分配
系統全域性區(SGA)是一個分配給Oracle 包含Oracle 資料庫例項控制資訊的記憶體段。SGA的大小對系統效能的影響極大,其預設引數設定只適用於配置很低的計算機,不適應收入系統現有裝置的需要。這些引數若不作調整,會對系統資源造成巨大浪費。就收入系統的Alpha 1200而言,SGA的大小以160兆左右為宜。
初始化引數檔案中的一些引數對SGA的大小有決定性的影響。引數DB-BLOCK-BUFFERS(SGA中儲存區快取記憶體的緩衝區數目),引數SHARED-POOL-SIZE(分配給共享SQL區的位元組數),是SGA大小的主要影響者。
DB-BLOCK-BUFFERS引數是SGA大小和資料庫效能的最重要的決定因素。該值較高,可以提高系統的命中率,減少I/O。每個緩衝區的大小等於引數DB-BLOCK-SIZE的大小。Oracle資料庫塊以位元組表示大小。
Oracle SGA區共享池部分由庫快取記憶體、字典快取記憶體及其他一些使用者和伺服器會話資訊組成,共享池是最大的消耗成分。調整SGA區各個結構的大小,可以極大地提高系統的效能。
調整Library Cache
庫快取記憶體(Library Cache)中包含私用和共享SQL區和PL/SQL區。調整SGA的重要問題是確保庫快取記憶體足夠大,以使Oracle能在共享池中保持分析和執行語句,提高語查詢V$LIBRARYCACHE 資料字典檢視句分析和執行效率,降低資源消耗。通過比較Library Cache的命中率來決定它的大小。(其中,pins表示快取記憶體命中率,reloads表示快取記憶體失敗)
SQL〉SELECT SUM(pins),SUM(reloads) FROM v$librarycache;
如果sum(reload)/sum(pins)≈0,說明Library Cache的命中率比較合適,若大於1,則需要增加共享池(SHARED-POOL-SIZE)的大小(在初始化引數檔案中)。
調整資料字典快取記憶體(Dictionary Cache)
資料字典快取記憶體包括了有關資料庫的結構、使用者、實體資訊等。資料字典的命中率對系統有很大的影響。命中率的計算中,getmisses 表示失敗次數,gets表示成功次數。
查詢V$ROWCACHE表:
SQL>SELECT (1-(SUM(getmisses)/(SUM(gets)+SUM(getmisses))))*100FROM v$rowcache;
如果該值>90%,說明命中率合適。否則,應增大共享池的大小。
調整資料庫緩衝區快取記憶體
Oracle 在執行期間向資料庫快取記憶體讀寫資料,快取記憶體命中表示資訊已在記憶體中,快取記憶體失敗意味著Oracle必需進行磁碟I/O。保持快取記憶體失敗率最小的關鍵是確保快取記憶體的大小。初始化引數DB-BLOCK-BUFFERS控制資料庫緩衝區快取記憶體的大小。可通過查詢V$SYSSTAT命中率,以確定是否應當增加DB-BLOCK-BUFFERS的值。
SQL>SELECT name,value FROM V$SYSSTATWHERE name IN (’dbblock gets’,’consistent gets’,’physical reads’);
通過查詢結果
命中率=1-physical reads/(dbblock gets+consistent gets)
如果命中率<0.6~0.7,則應增大DB-BLOCK-BUFFERS。
調整磁碟I/O
磁碟I/O是系統效能的瓶頸,解決好磁碟I/O,可明顯提高效能。通過查詢V$FILESTAT可以知道每個物理檔案的使用頻率(phyrds表示每個資料檔案讀的次數,phywrts表示每個資料檔案寫的次數)
SQL>SELECT name,phyrds,phywrts FROM v$datafile df,v$filestat fsWHERE df.file# =fs.file#;
對於使用頻率較高的物理檔案,可以採用以下策略:
將I/O儘可能平均分配在儘可能多的磁碟上。
為表和索引建立不同的表空間。
將資料檔案與重做日誌檔案分離在不同的磁碟上。
減少不經Oracle SERVER的磁碟I/O。
調整競爭
當多個程式對相同的資源發出申請時,產生競爭。
修改Process引數
該引數定義可以同時連線到Oracle資料庫的最大程式數,預設值為50。注意,Oracle的後臺程式也包括在此數目中,建議將該值改為200。
減少排程程式的競爭
減少排程程式的競爭,通過查詢v$dispatcher表來判定排程程式的競爭
SQL>SELECT network ,sum(busy)/sum(busy)+sum(idle) FROM v$dispatcherGROUP BY network;
如果某種協議忙的比率超過50%,應增加MTS-DISPATCHERS的值。
減少多執行緒服務程式競爭
首先查詢V$SYSSTAT表判定是否發生多執行緒服務程式競爭:
SQL>SELECT DECODE(totalq,0,’No request’,wait/totalq||’hunderths of seconds’) FROM v$sysstatWHERE type=’common’;
如果共享服務程式數量已達到初始化引數檔案中MTS-MAX-SERVERS指定的最大值,但應用執行時,平均請求等待時間仍持續增長,那麼,應加大MTS-MAX-SERVERS的值。
減少重做日誌緩衝區競爭
通過查詢V$SYSSTAT表判定redo log 檔案緩衝區是否足夠。
SQL>SELECT name,value FROM v$sysstatWHERE name=’redo log space request’;
此處value的值應接近於0,否則,應增大初始化引數檔案的LOG-BUFFEQS的值。
減少回退段競爭
回退段對效能也有影響,根據事物大小情況來分配合適的回退段。
首先判定回退段的數量能否滿足系統執行的需要:
查詢V$WAITSTAT表與V$SYSSTAT表
SQL>SELECT class,count FROM v$waitstatWHERE class IN (’system undo header’,system undo block’,’undo header’,’undo block’);SQL>SELECT sum(value)FROM v$sysstat WHERE name IN (’db block gets’,’consistent gets’);
如果任何一個class/sum(value)>10%,那麼考慮增加回退段。回退段的數量一般按如下規律設定:
使用者數 回退段個數
n<164
16<328
32<=n n/4 但不超過50
減少Free List競爭
當多個程式同時向一個表中插入資料時,產生Free List競爭。
SQL>SELECT class,count FROM v$waitstatWHERE class=’free list’;SQL>SELECT sum(value)FROM v$sysstatWHERE name IN (’db block gets’,’consistent gets’);
如果class/sum(value)>1%,則應增加該表的Free List 的值。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25736250/viewspace-702423/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 掌握Oracle資料庫效能調優方法Oracle資料庫
- JVM調優總結-調優方法JVM
- JVM調優總結(十)-調優方法JVM
- oracle sql調優OracleSQL
- oracle效能調優Oracle
- Oracle常用調優手段Oracle
- Oracle 調優總結Oracle
- 淺談Oracle調優Oracle
- Oracle調優總結Oracle
- oracle的調優(轉)Oracle
- Oracle 效能調優 概述Oracle
- [轉載]Oracle資料庫應用系統調優方法Oracle資料庫
- Oracle常用調優手段[轉]Oracle
- Oracle效能調優原則Oracle
- 【Oracle】undo 自動調優Oracle
- Oracle專家調優秘密Oracle
- Oracle優化方法Oracle優化
- oracle資料庫調優描述Oracle資料庫
- Oracle 星型模式的調優Oracle模式
- ORACLE DW效能調優研究方向Oracle
- Oracle專家調優秘密(zt)Oracle
- Oracle專家調優秘密(轉)Oracle
- Oracle調優之看懂Oracle執行計劃Oracle
- MySQL 效能調優的10個方法MySql
- Oracle SQL調優之分割槽表OracleSQL
- Oracle專家調優祕密(轉)Oracle
- 部落格連結—Oracle效能調優Oracle
- oracle效能優化-共享池調整Oracle優化
- Oracle調優(入門及提高篇)Oracle
- 針對oracle效能的io調優Oracle
- Unix環境下的Oracle調優Oracle
- Oracle記憶體引數調優Oracle記憶體
- Oracle專家調優祕密(zt)Oracle
- Oracle優化的方法Oracle優化
- oracle效能調優:管理oracle日誌之調整線上日誌檔案Oracle
- oracle筆記整理13——效能調優之SQL優化Oracle筆記SQL優化
- mysql效能的檢查和調優方法MySql
- 某公司oracle 效能調優診斷案例Oracle