一、內存簡介
達夢數據庫的內存使用簡單可以分為如下三部分:
select * from v$mem_pool;
select * from v$dm_ini where para_NAME = 'MEMORY_POOL';
達夢數據庫系統使用的內存分為3部分。
分別是緩沖區內存、主內存、其他內存。
二、達夢內存詳解
1、緩沖區
緩沖區內存分為
(1)數據緩沖區
- normal緩沖區,對應的ini參數是buffer,
- keep緩沖區,常駐的數據都放在keep數據頁中,對應的ini參數就是keep,
- recycle緩沖區,高並發系統、使用with as語句較多,臨時數據較多需要將這個recycle數據頁所占用的內存值調大,對應的ini參數是recycle。記住所有的頁大小在初始化實例時已經設定好了,現在使用ini參數修改的是緩沖區內存大小。
- fast緩沖區,fast包含數據頁和回滾頁, 常駐緩沖區,這兩者都是由系統自動管理,無需用戶干涉對應的ini參數是fast_pool_pages和fast_roll_pages,代表fast緩沖區的大小為多少個數據頁。,
select * from v$dm_ini where para_NAME = 'BUFFER'; select * from v$dm_ini where para_NAME = 'KEEP'; select * from v$dm_ini where para_NAME = 'RECYCLE';
select * from v$dm_ini where para_NAME = 'FAST_POOL_PAGES';
select * from v$dm_ini where para_NAME = 'FAST_ROLL_PAGES';
有個視圖v$bufferpool代表了數據緩沖區所有的pool,咱看這個視圖的查詢結果:
通過v$bufferpool視圖和這個sql,可以大致算出數據緩沖區的總大小
select sum(n_pages * page_size) from v$bufferpool;
(2)日志緩沖區
redo_log日志在寫入磁盤前,先寫入在日志緩沖區中,最后在機會合適時再寫入日志緩沖區。對應的ini參數是RLOG_BUF_SIZE
select * from V$DM_INI WHERE PARA_NAME = 'RLOG_BUF_SIZE'; 單位是頁數量
SELECT * FROM v$rlog;
(3)sql緩沖區
- 所需執行的sql執行計划,sql,結果集都會在緩存在sql緩沖區中。
- v$cacheitem,記錄了當前sql緩沖區的使用情況。此外,v$cachepln、v$cachers、v$cachesql分別記錄了執行計划緩存、結果集緩存、SQL語句緩存(注:這些視圖都是在參數USE_PLN_POOL !=0才統計,其中結果集緩存還受rs_can_cache、rs_cache_tables、rs_cache_min_time參數控制)。
- 對於SQL類別多、包比較多的系統可適當調大該參數。
- 常用 Select sum(item_size) from v$cacheitem 來計算SCP的大小。(存疑,這個結算結果和cache——pool——size的值不一樣)
select * from v$dm_ini where para_NAME = 'CACHE_POOL_SIZE'; 單位是M
SELECT * FROM V$CACHEPLN;
(4)數據字典緩沖區
數據庫對像比如表,索引,視圖,序列,同義詞,觸發器,存儲過程的信息都緩存在數據字典緩沖區中。
在數據庫對象較多時,可適當增大該參數。通過查詢select total_size,used_size FROM v$dict_cache
select * from V$DM_INI WHERE PARA_NAME = 'DICT_BUF_SIZE';
若想知道字典緩沖區中緩存對象的詳細信息需查詢視圖v$dict_cache_item
SELECT * FROM V$DICT_CACHE_ITEM ;