調整緩衝區快取記憶體(Buffer Cache)的效能(1)
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@]
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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 調整緩衝區快取記憶體(Buffer Cache)的效能(轉)快取記憶體
- buffer cache深度分析及效能調整(五)
- buffer cache深度分析及效能調整(四)
- buffer cache深度分析及效能調整(六)
- Linux記憶體、Swap、Cache、BufferLinux記憶體
- Node.js Buffer(緩衝區)Node.js
- Java NIO 之 Buffer(緩衝區)Java
- 8、Node.js Buffer(緩衝區)Node.js
- Java-NIO之Buffer(緩衝區)Java
- Cache和Buffer都是快取,有什麼區別?Linux快取Linux
- Java整數緩衝區Java
- 高效能記憶體快取 ristretto記憶體快取
- MySQL中讀頁緩衝區buffer poolMySql
- Nio再學習之NIO的buffer緩衝區
- weblogic 記憶體調整Web記憶體
- 效能測試必備知識(11)- 怎麼理解記憶體中的Buffer和Cache?記憶體
- Wgpu圖文詳解(03)緩衝區BufferGPU
- Linux工具效能調優系列二:buffer和cacheLinux
- CPU快取記憶體快取記憶體
- 為什麼node.js要引入buffer?淺析緩衝區bufferNode.js
- InnoDB 中的緩衝池(Buffer Pool)
- 【Cache】將常用的“小表”快取到Buffer Cache快取
- Linux Buffer/Cache 的區別Linux
- buffer與cache的區別
- Redis效能篇(五)Redis緩衝區Redis
- Oracle - 資料庫的記憶體調整Oracle資料庫記憶體
- 多核cpu、cpu快取記憶體、快取一致性協議、快取行、記憶體快取記憶體協議
- Node.js 中的緩衝區(Buffer)究竟是什麼?Node.js
- 記憶體快取選型記憶體快取
- MRAM快取記憶體的組成快取記憶體
- GO語言————6.12 通過記憶體快取來提升效能Go記憶體快取
- CQengine高效能記憶體資料快取查詢框架記憶體快取框架
- CPU快取和記憶體屏障快取記憶體
- docker部署redis快取記憶體DockerRedis快取記憶體
- 談談CPU快取記憶體快取記憶體
- django 快取表格到記憶體Django快取記憶體
- Java記憶體快取-通過Google Guava建立快取Java記憶體快取GoGuava
- solaris記憶體引數調整及管理記憶體
- 達夢記憶體調整及修改方法記憶體