cuug 資料緩衝區調優
http://bbs.cuug.com/forum.php?mod=viewthread&tid=1336&extra=page%3D1
緩衝區分為
預設池
回收池
保留池
其他非預設塊大小池
緩衝區中塊的狀態:
pending:未決,該記憶體塊處於正在修改或者訪問當中。
dirty:已經被修改過的記憶體塊
free:髒塊被寫入資料檔案後,就被標識為可用(空閒)
檢查點:階段性的儲存修改過的資料塊
DBWn:寫入條件
1、儲存
2、釋放
檢查點發生
沒有空閒
達到閥值
超時
RAC PING request
表空間 offline read only
表 drop和truncate
表空間begin backup
你想,有表T,有塊b1、b2、b3……b100,其中,假設b2在Buffer Cache是個髒塊。
現在表T被刪掉了,b1、b2直到b100,這100個塊的空間被釋放,假設這100個塊的空間又被分配給了表M。現在塊b1、b2、b3……b100屬於表M。
過一會兒,DBWR被觸發,將原來表T的髒塊b2寫到磁碟,注意,塊b2已經是表M了。這將覆蓋表M在b2中的資料。
如何避免這種情況呢,Drop表前先將表所有髒塊寫磁碟,避免以後DBWR再寫它的髒塊
使用多個緩衝區
keep:將經常訪問的資料放在keep池中
recycle:當事務結束時,將涉及的資料塊從池中剔除
主要的目的是減少對預設池的影響
查詢
select table_name,buffer_pool from user_tables
alter table dept storage(buffer_pool keep);
各個緩衝區的特點
? KEEP Pool
– 快取的資料塊能被重複訪問.
– 表的大小是預設池的10%.
? RECYCLE Pool
– 回收池的資料塊不能被當前事務之外其它
事務訪問.
– 表的大小至少是預設池的2倍
資料緩衝區涉及的資料字典
SQL> SELECT *
2 FROM v$buffer_pool;
ID NAME LO_SETID HI_SETID SET_COUNT BUFFERS LO_BNUM HI_BNUM
-- ------- -------- -------- --------- ------- ------- -------
1 KEEP 3 3 1 14000 0 13999
2 RECYCLE 4 6 3 2000 14000 15999
3 DEFAULT 1 2 2
其它關於資料緩衝區檢視
From V$SYSSTAT:
select name,value
2 FROM v$sysstat
3 WHERE name = 'free buffer inspected';
NAME VALUE
--------------------------- --------
free buffer inspected 183
From V$SYSTEM_EVENT:
SQL> SELECT event, total_waits
2 FROM v$system_event
3 WHERE event in
4 ('free buffer waits', 'buffer busy waits');
EVENT TOTAL_WAITS
---------------------- -----------
free buffer waits 337
buffer busy waits 3466
free buffer inspected:表示oracle在釋放緩衝區,在LRU列表中掃描過多少個資料塊,才找到free
buffer busy waits--熱快
1.塊屬於段頭(segment header):因為多個併發insert造成的
解決辦法
1.使用多個freelist列表
2.使用自動段管理方式(利用bitmap管理)
2、如果塊屬於回滾段頭,太多的事物使用同一個回滾段
解決方法:
1、儘量少的事物使用同一個回滾段
3、普通的資料塊(存放資料行或者索引行的)多個程式訪問同一個塊中的行資料
解決方案:
1、使用尺寸小的資料塊
2、把pctfree的設定大一些
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/500314/viewspace-1068573/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 調節Oracle資料緩衝區引數,緩衝整個資料庫(轉)Oracle資料庫
- Buffer Cache Size(資料緩衝區)
- Java NIO -- 緩衝區(Buffer)的資料存取Java
- 緩衝區分析
- Oracle資料庫緩衝區命中率(轉)Oracle資料庫
- Oracle調整緩衝區快取記憶體Oracle快取記憶體
- C 標準庫IO緩衝區和核心緩衝區的區別
- Java NIO:緩衝區Java
- getchar緩衝區
- Java NIO 之緩衝區Java
- Unity深度緩衝區指令Unity
- Java整數緩衝區Java
- nginx 緩衝區構造Nginx
- stdio流緩衝區
- 資料庫存取緩衝區的LRU與MRU演算法資料庫演算法
- Oracle效能最佳化調整--調整緩衝區快取記憶體Oracle快取記憶體
- Node.js Buffer(緩衝區)Node.js
- PHP的輸出緩衝區PHP
- JavaScript WebGL 幀緩衝區物件JavaScriptWeb物件
- Linux 命令 管道 緩衝區Linux
- log buffer(日誌緩衝區)
- Java NIO 之 Buffer(緩衝區)Java
- Java NIO2:緩衝區Java
- 動態更新——緩衝區物件物件
- 緩衝區溢位實驗
- Libevent應用 (三) 資料緩衝
- 調整緩衝區快取記憶體(Buffer Cache)的效能(轉)快取記憶體
- 調整緩衝區快取記憶體(Buffer Cache)的效能(1)快取記憶體
- 調整緩衝區快取記憶體(Buffer Cache)的效能(2)快取記憶體
- 調整緩衝區快取記憶體(Buffer Cache)的效能(3)快取記憶體
- 程式分析與優化 - 9 附錄 XLA的緩衝區指派優化
- 緩衝區溢位小程式分析
- PHP 輸出緩衝區應用PHP
- Java-NIO之Buffer(緩衝區)Java
- Redis效能篇(五)Redis緩衝區Redis
- 8、Node.js Buffer(緩衝區)Node.js
- node.js中緩衝區–BufferNode.js
- C語言緩衝區問題C語言