oracle數據庫的性能調整

    oracle是一個高性能數據庫軟件。用戶可以通過參數的調整,達到性能的優化。性能優化主要分爲兩部分:一是數據庫管理員通過對系統參數的調整達到優化的目的,二是開發人員通過對應用程序的優化達到調整的目的。
  在此,僅就係統參數的調整進行探討,而不涉及應用程序的優化。對系統參數的調整,可以分爲以下幾個部分:
  (1)調整內存分配
  系統全局區(SGA)是一個分配給ORACLE 包含ORACLE 數據庫實例控制信息的內存段。SGA的大小對系統性能的影響極大,其缺省參數設置只適用於配置很低的計算機,不適應收入系統現有設備的需要。這些參數若不作調整,會對系統資源造成巨大浪費。就收入系統的Alpha 1200而言,SGA的大小以160兆左右爲宜。
  初始化參數文件中的一些參數對SGA的大小有決定性的影響。參數DBBLOCKBUFFERSSGA中存儲區高速緩存的緩衝區數目),參數SHAREDPOOLSIZE(分配給共享SQL區的字節數),是SGA大小的主要影響者。
  DBBLOCKBUFFERS參數是SGA大小和數據庫性能的最重要的決定因素。該值較高,可以提高系統的命中率,減少I/O。每個緩衝區的大小等於參數DBBLOCKSIZE的大小。ORACLE數據庫塊以字節表示大小。
  Oracle SGA區共享池部分由庫高速緩存、字典高速緩存及其它一些用戶和服務器會話信息組成,共享池是最大的消耗成分。調整SGA區各個結構的大小,可以極大地提高系統的性能。
  .調整Library Cache
  庫高速緩存(Library Cache)中包含私用和共享SQL區和PL/SQL區。調整SGA的重要問題是確保庫高速緩存足夠大,以使ORACLE能在共享池中保持分析和執行語句,提高語句分析和執行效率,降低資源消耗。通過比較Library Cache的命中率來決定它的大小。查詢V$LIBRARYCACHE 數據字典視圖(其中,pins表示高速緩存命中率,reloads表示高速緩存失敗)
SQL
SELECT SUM(pins),SUM(reloads)
  FROM v$librarycache;
如果sum(reload)/sum(pins)0,說明Library Cache的命中率比較合適,若大於1,則需要增加共享池(SHAREDPOOLSIZE)的大小(在初始化參數文件中)。
  .調整數據字典高速緩存(Dictionary Cache
  數據字典高速緩存包括了有關數據庫的結構、用戶、實體信息等。數據字典的命中率對系統有很大的影響。命中率的計算中,getmisses 表示失敗次數,gets表示成功次數。
  查詢V$ROWCACHE表:
  SQL>SELECT (1-(SUM(getmisses)/(SUM(gets)+SUM(getmisses))))*100
  FROM v$rowcache;
  如果該值>90%,說明命中率合適。否則,應增大共享池的大小。
  .調整數據庫緩衝區高速緩存
  Oracle 在運行期間向數據庫高速緩存讀寫數據,高速緩存命中表示信息已在內存中,高速緩存失敗意味着ORACLE必需進行磁盤I/O。保持高速緩存失敗率最小的關鍵是確保高速緩存的大小。初始化參數DBBLOCKBUFFERS控制數據庫緩衝區高速緩存的大小。可通過查詢V$SYSSTAT命中率,以確定是否應當增加DBBLOCKBUFFERS的值。
  SQL>SELECT name,value
  FROM V$SYSSTAT
  WHERE name IN (’dbblock gets’,’consistent gets’,’physical reads’);
  通過查詢結果
  命中率=1-physical reads/(dbblock gets+consistent gets)
  如果命中率<0.60.7,則應增大DBBLOCKBUFFERS
  (2)調整磁盤I/O
  磁盤I/O是系統性能的瓶頸,解決好磁盤I/O,可明顯提高性能。通過查詢V$FILESTAT可以知道每個物理文件的使用頻率(phyrds表示每個數據文件讀的次數,phywrts表示每個數據文件寫的次數)
  SQL>SELECT name,phyrds,phywrts
  FROM v$datafile df,v$filestat fs
  WHERE df.file# =fs.file#;
對於使用頻率較高的物理文件,可以採用以下策略:
  .I/O儘可能平均分配在儘可能多的磁盤上。
  .爲表和索引建立不同的表空間。
  .將數據文件與重做日誌文件分離在不同的磁盤上。
  .減少不經oracle SERVER的磁盤I/O
  (3)調整競爭
  當多個進程對相同的資源發出申請時,產生競爭。
  .修改process參數
  該參數定義可以同時連接到oracle數據庫的最大進程數,缺省值爲50。注意,oracle的後臺進程也包括在此數目中,建議將該值改爲200
  .減少調度進程的競爭
  減少調度進程的競爭,通過查詢v$dispatcher表來判定調度進程的競爭
  SQL>SELECT network ,sum(busy)/sum(busy)+sum(idle)
  FROM v$dispatcher
  GROUP BY network;
  如果某種協議忙的比率超過50%,應增加MTSDISPATCHERS的值。
  .減少多線程服務進程競爭
  首先查詢V$SYSSTAT表判定是否發生多線程服務進程競爭:
  SQL>SELECT DECODE(totalq,0,’No request’,wait/totalq||’hunderths of seconds’) FROM v$sysstat
  WHERE type=’common’;
  如果共享服務進程數量已達到初始化參數文件中MTSMAXSERVERS指定的最大值,但應用運行時,平均請求等待時間仍持續增長,那幺,應加大MTSMAXSERVERS的值。
  .減少重做日誌緩衝區競爭
  通過查詢V$SYSSTAT表判定redo log 文件緩衝區是否足夠。
  SQL>SELECT name,value
  FROM v$sysstat
  WHERE name=redo log space request;
  此處value的值應接近於0,否則,應增大初始化參數文件的LOGBUFFEQS的值。
  .減少回退段競爭
  回退段對性能也有影響,根據事物大小情況來分配合適的回退段。
  首先判定回退段的數量能否滿足系統運行的需要:
  查詢V$WAITSTAT表與V$SYSSTAT
  SQL>SELECT class,count
  FROM v$waitstat
  WHERE 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<16
            4
16<n<32
          8
32<=n
           n/4 但不超過50
  .減少Free List競爭
  當多個進程同時向一個表中插入數據時,產生Free List競爭。
  SQL>SELECT class,count
  FROM v$waitstat
  WHERE class=free list;
  SQL>SELECT sum(value)
  FROM v$sysstat
  WHERE name IN (db block gets,consistent gets’);
  如果class/sum(value)>1%,則應增加該表的Free List 的值。 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章