在此,僅就系統參數的調整進行探討,而不涉及應用程序的優化。對系統參數的調整,可以分為以下幾個部分:
(1)調整內存分配
系統全局區(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能在共享池中保持分析和執行語句,提高語句分析和執行效率,降低資源消耗。通過比較library cache的命中率來決定它的大小。查詢v$librarycache 數據字典視圖(其中,pins表示高速緩存命中率,reloads表示高速緩存失?。?/p>
  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))))*100
  from v$rowcache;
如果該值>90%,說明命中率合適。否則,應增大共享池的大小。
.調整數據庫緩沖區高速緩存
oracle 在運行期間向數據庫高速緩存讀寫數據,高速緩存命中表示信息已在內存中,高速緩存失敗意味著oracle必需進行磁盤i/o。保持高速緩存失敗率最小的關鍵是確保高速緩存的大小。初始化參數db-block-buffers控制數據庫緩沖區高速緩存的大小??赏ㄟ^查詢v$sysstat命中率,以確定是否應當增加db-block-buffers的值。
  sql>select name,value
  from v$sysstat
  where name in (’dbblock gets’,’consistent gets’,’physical reads’);
通過查詢結果
命中率=1-physical reads/(dbblock gets+consistent gets)
如果命中率<0.6~0.7,則應增大db-block-buffers。
(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。
新聞熱點
疑難解答