Buffer Cache Size(資料緩衝區)
Buffer Cache Size(資料緩衝區)
資料庫緩衝區用作oracle執行sql語句的工作區。Sql需要查詢或者操作的資料
先從磁碟塊中讀取到緩衝區。緩衝區中的資料將會保留一段時間,這樣可以減
少IO操作。提高效能。資料庫緩衝區對於資料庫的效能很重要。一般要設定的
大一些以便快取經常訪問的資料塊。減少IO操作。但不能大到讓作業系統使用
虛擬記憶體。另外資料庫緩衝區過大可能會導致例項啟動緩慢,因為要格式化大
量的緩衝區。該區的大小與運用程式型別相關。
資料緩衝區的管理方式:
oracle維護了兩張列表用來維護資料緩衝區中的資料塊:
寫入列表(write list):用來維護髒快取塊(dirty block),指那些發生了
修改但是還沒有寫入資料檔案中的資料。
最近最少使用列表(least recently used,LRU):用來維護空閒的快取塊
(free buffers)、命中快取塊(pinned buffer),以及那些還沒有來的及
移動到寫入列表的髒資料塊。
那些沒有被經常訪問的資料存放在LRU的尾部,那些經常被訪問的資料儲存在
LRU的頭部,頭部也稱為MRU(most recently used),隨著那些被頻繁訪問的
資料不斷的移動到MRU端,相對訪問頻段比較低的資料被移動到LRU的尾部。
如果會話要訪問的資料不在資料緩衝區中,oracle就需要從資料檔案中讀入
那些需要被訪問的塊。在這之前,必須先查詢資料緩衝區中的空閒空間,(從
LRU端開始尋找)找到,在查詢過程中如果遇到髒資料,oracle會把髒資料移動
到寫入列表,如果尋找到合適的空閒空間oracle將從資料檔案中讀入想要的資料
塊放在該空閒空間。讀入的資料被放置在LRU列表的某個位置,如果搜尋了一定的
資料緩衝空間,還沒有找到合適的空間,oracle將會啟動DBWR將寫入列表中的髒數
據寫入磁碟資料檔案中。清理出的空閒空間被放置在LRU列表中,oracle會再次尋找
空閒,以找到合適的空閒緩衝塊。
足夠放下被訪問的資料的空間。
oracle中的資料緩衝區是比較複雜的記憶體結構:
預設池(default pool):在預設情況下資料檔案讀取的資料就儲存在該區。
對於的初始化引數為:db_cache_size,一般情況下設定預設池就可以滿足需求。
SQL> show parameter db_cache_size;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_cache_size big integer 160M
保持池(keep pool):用於儲存那些頻繁訪問但是不是最熱的資料塊。對於的初
始化引數為buffer_pool_keep
SQL> show parameter buffer_pool_keep;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
buffer_pool_keep string
該資料庫尚未使用keep pool
回收池(recycle pool):用於儲存那些不希望長期儲存在資料緩衝區的資料,儘快的換出
快取區。對於初始化引數:buffer_pool_recycle.
SQL> show parameter buffer_pool_recycle;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
buffer_pool_recycle string
該資料庫尚未使用recycle pool。
物件被載入到哪一個緩衝池是由物件的儲存型別決定的。可以透過storage子句指定儲存
引數,指定物件載入的緩衝池型別。
SQL> create table test_table(id char(5)) storage (buffer_pool keep);
Table created
SQL> alter table test_table storage (buffer_pool recycle);
Table altered
如果不指定buffer_pool 引數預設物件載入的時候是儲存在default池中的。
SQL> alter system set db_keep_cache_size=8m;
System altered
設定keep pool為8mb,設定引數為db_keep_cache_size
SQL> alter system set db_recycle_cache_size=8m;
System altered
設定recycle pool為8mb,設定引數為db_recycle_cache_size
SQL> select component,current_size
2 from V$sga_dynamic_components;
COMPONENT CURRENT_SIZE
---------------------------------------------------------------- ------------
shared pool 188743680
large pool 62914560
java pool 54525952
streams pool 0
DEFAULT buffer cache 167772160
KEEP buffer cache 8388608
RECYCLE buffer cache 8388608
DEFAULT 2K buffer cache 0
DEFAULT 4K buffer cache 0
DEFAULT 8K buffer cache 0
DEFAULT 16K buffer cache 0
DEFAULT 32K buffer cache 0
Shared IO Pool 0
ASM Buffer Cache 0
檢視設定結果
oracle的緩衝區結構是為了把適當的物件儲存在適當的池中。這是對緩衝區
功能的一種細分。緩衝區中的各個子區之間的記憶體是不能夠共享的,例如分
配給預設池的記憶體只能預設池使用。其他池亦然如此。並且各自子池要設定
合理,以便池中的記憶體空間足夠大,能夠快取需要載入的物件一般情況下不
需要對緩衝區進行如此的細分,僅設定預設池就可以滿足需求了。
從oracle9i開始支援非標準資料庫,oracle9i以前資料庫中所以的資料塊大小是相同的
由引數db_block_size確定。oracle9i開始允許在建立表空間的時候指定非標準資料塊
以便靈活的儲存和管理資料。
相應的資料緩衝區中要有相應的地方存放這些非標準的塊。default池,keep池,recycle池
都只能儲存預設的標準資料塊。在oracle中透過以下引數設定不同塊大小的使用的緩衝區:
db_2k_cache_size:為2kb的資料塊指定緩衝區大小
db_4k_cache_size:為4kb的資料塊指定緩衝區大小
db_8k_cache_size:為8kb的資料塊指定緩衝區大小
db_16k_cache_size:為16kb的資料塊指定緩衝區大小
db_32k_cache_size:為32kb的資料塊指定緩衝區大小
和db_block_size大小相同的資料庫引數不需要設定。
SQL> show parameter db_block_size;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_block_size integer 8192
檢視該資料標準塊大小
SQL> alter system set db_16k_cache_size=12m;
System altered
為16kb的資料塊指定緩衝區大小
SQL> select component,current_size
2 from v$sga_dynamic_components;
COMPONENT CURRENT_SIZE
---------------------------------------------------------------- ------------
shared pool 188743680
large pool 62914560
java pool 54525952
streams pool 0
DEFAULT buffer cache 167772160
KEEP buffer cache 8388608
RECYCLE buffer cache 8388608
DEFAULT 2K buffer cache 0
DEFAULT 4K buffer cache 0
DEFAULT 8K buffer cache 0
DEFAULT 16K buffer cache 12582912
DEFAULT 32K buffer cache 0
Shared IO Pool 0
ASM Buffer Cache 0
確定設定結果。
SQL> create tablespace test datafile 'e:\oracle\testing.dbf' size 10m
2 blocksize 16k;
Tablespace create
建立16kb的非標準資料塊表空間。
注意:必須先設定資料緩衝區中相應的非標準資料塊的緩衝區大小,才能建立相應的非
標準資料塊表空間。否則會報錯。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26110315/viewspace-715720/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Node.js Buffer(緩衝區)Node.js
- Java NIO 之 Buffer(緩衝區)Java
- 調整緩衝區快取記憶體(Buffer Cache)的效能(轉)快取記憶體
- Java-NIO之Buffer(緩衝區)Java
- 8、Node.js Buffer(緩衝區)Node.js
- MySQL中讀頁緩衝區buffer poolMySql
- Wgpu圖文詳解(03)緩衝區BufferGPU
- Nio再學習之NIO的buffer緩衝區
- 為什麼node.js要引入buffer?淺析緩衝區bufferNode.js
- InnoDB 中的緩衝池(Buffer Pool)
- buffer與cache的區別
- Linux Buffer/Cache 的區別Linux
- Node.js 中的緩衝區(Buffer)究竟是什麼?Node.js
- node事件迴圈 EventEmitter 非同步I/O Buffer緩衝區 模組事件MIT非同步
- stdio流緩衝區
- Java NIO:緩衝區Java
- Cache 和 Buffer 的區別在哪裡?
- Cache 和 Buffer 有什麼區別?
- 你真的會用PostGIS中的buffer緩衝嗎?
- 聊聊 MySQL 網路緩衝區、net_buffer_length、max_allowed_packet 那些事MySql
- Mysql Key Buffer SizeMySql
- Java NIO 之緩衝區Java
- Java整數緩衝區Java
- Unity深度緩衝區指令Unity
- Linux 命令 管道 緩衝區Linux
- Libevent應用 (三) 資料緩衝
- tf.data.Dataset.shuffle(buffer_size)中buffer_size的理解
- IO之核心buffer----"buffer cache"
- OpenGL Android課程七:介紹Vertex Buffer Objects(頂點緩衝區物件,簡稱:VBOs)AndroidObject物件
- 緩衝區溢位實驗
- 緩衝區溢位攻擊
- JavaScript WebGL 幀緩衝區物件JavaScriptWeb物件
- PHP的輸出緩衝區PHP
- Oracle Cache Buffer ChainsOracleAI
- 《Lua-in-ConTeXt》10:緩衝區魔法Context
- 緩衝區溢位小程式分析
- Redis效能篇(五)Redis緩衝區Redis
- PHP 輸出緩衝區應用PHP
- Cache和Buffer都是快取,有什麼區別?Linux快取Linux