調整緩衝區快取記憶體(Buffer Cache)的效能(1)

jss001發表於2009-02-15
  Buffer cache由資料塊組成。
  
  1. Buffer cache的工作原理
  
  LRU列表:MRU ………………. LRU。(全表掃描FTS放在LRU端。)
  
  緩衝區塊的狀態:Free、Pinned、Clean、Dirty。
  
  Dirty List或Write List(寫列表)。
  
  資料庫寫程式DBW0將緩衝區快取記憶體中的資料寫到資料檔案中。
  
  2.測量Buffer cache的效能
  
  測量Buffer cache的命中率:
  SQL> select 1-((physical.value – direct.value – lobs.value)/logical.value) “Buffer Cache Hit Ratio” from V$SYSSTAT physical, V$SYSSTAT direct,
  V$SYSSTAT lobs, V$SYSSTAT logical where physical.name = ‘physical reads’
  And direct.name = ‘physical reads direct’ and
  lobs.name = ‘physical reads direct (lob)’
  And logical.name = ‘session logical reads’;
  “Buffer Cache Hit Ratio”的值要 > 90%。
  
  使用STATSPACK來監視Buffer cache。
  
  使用REPORT.TXT來監視Buffer cache。
  
  非命中率指標:Free Buffer Inspected、Free Buffer Waits、Buffer Busy Waits。(V$sysstat)
  
  使用Performance Manager(資料庫例程)來監視Buffer Cache。
  
  3. 提高緩衝區快取記憶體效能的方法
  
  加大Buffer Cache的大小:init.ora引數DB_CACHE_SIZE(動態引數)。
  
  使用Buffer Cache Advisory功能決定Buffer Cache的大小:
  
  首先將init.ora引數DB_CACHE_ADVICE設成ON,然後查詢V$DB_CACHE_ADVICE。
  
  使用多個緩衝區池:
  Keep Pool: DB_KEEP_CACHE_SIZE
  Recycle Pool:DB_RECYCLE_CACHE_SIZE
  Default Pool: DB_CACHE_SIZE
  
  在記憶體中快取表: 表的CACHE選項,對最佳化小表的全表掃描。
  
  正確建立索引。
  
  4.調整Large Pool和JAVA POOL
  
  Large Pool用於共享伺服器、RMAN、並行查詢、DBWR的從屬程式。
  
  Large Pool的大小透過init.ora引數Large_pool_size設定。預設為8M。
  
  從V$sgastat中監視free memory的值:
  
  SQL>SELECT name,bytes FROM V$sgastat WHERE pool = ‘large pool’;
  
  JAVA_POOL池的預設大小為32M。對於大型Java應用程式,JAVA_POOL池的大小應大於50M。
  
  init.ora引數java_pool_size
  
  從V$sgastat中監視free memory的值。
  
  SQL>SELECT name,bytes FROM V$sgastat WHERE pool = ‘java pool’;
  
  調整重做有關的效能
  
  Oracle重做有關的元件包括:Redo Log Buffer、Online Redo Log、LGWR、Archive Log、Checkpoint、Arch0。
  
  1. 監視Redo Log Buffer的效能
  
  Redo Log Buffer不採用LRU(Least Recently Used)演算法管理。
  
  當下列事件發生時,Redo Log Buffer的內容存檔:
  
  Commit時、每3秒、空間使用1/3、達到1M、檢查點。
  
  如果寫入Redo Log Buffer的速度超過LGWR存檔的速度,就會因等待而降低效能。
  
  監視Redo Log Buffer的重試率(<1%)。
  Select retries.value/entries.value “Redo Log Buffer Retry Ratio”
  From V$sysstat retries, V$sysstat entries
  Where retries.name = ‘redo buffer allocation retries’
  And entries.name = ‘redo entries’;
  “Redo Log Buffer Retry Ratio”的值要 < 1%。
  
  Select name,value from V$sysstat where name=’redo log space requests’;
  
  如果該值大,需要增加Redo Log Buffer。
  
  2. 提高Redo Log Buffer的效能
  
  增加Redo Log Buffer的大小:init.ora引數log_buffer。
  
  減小重做日誌的生成量。(如果設定表的NOLOGGING屬性,下列操作不記錄在Online Redo Log中:用SQL* Loader的直接路徑載入。
  
  NOLOGGING屬性還可用於下列SQL語句:CREATE TABLE AS SELECT、CREATE INDEX、
  ALTER INDEX REBUILD、CREATE TABELSPACE)。
  
  3. 調整檢查點程式的效能
  
  測量檢查點程式的效能:沒有完成的檢查點程式的次數。
  select * from V$system_event;
  
  兩個事件:checkpoint completed、log file switch(checkpoint incomplete)。
  
  Select * from V$sysstat。
  background checkpoints started和background checkpoints completed。
  
  使用Alert日誌來記錄檢查點程式:init.ora引數log_checkpoint_to_alert。
  
  使用Performance Manager來測量檢查點程式的效能:I/O中的平均灰資料佇列長度(如果為0,說明檢查點太頻繁)。
  
  建議調整online redo log的大小,使檢查點程式每20-30分鐘執行一次。
  
  4. 調整聯機重做日誌檔案
  
  使用V$system_event來監視聯機重做日誌檔案的效能:
  log file parallel write、log file switch completed。
  
  調整聯機重做日誌檔案的方法:與資料檔案、控制檔案、歸檔日誌檔案分開,放在原始裝置上。
  
  5. 調整歸檔效能
  
  檢查歸檔程式的效能:透過V$system_event中的log file switch(archiving needed)事件。
  
  檢查每個歸檔程式的狀態:V$archive_processes。
  
  建立多個歸檔程式:init.ora引數LOG_ARCHIVE_MAX_PROCESSES(預設為2)。[@more@]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/18921899/viewspace-1017385/,如需轉載,請註明出處,否則將追究法律責任。

相關文章