DM-內存結構


內存結構

內存結構主要包含內存池、緩沖區、排序區、哈希區等。

內存池

內存池包括共享內存池和其他一些運行時內存池。

共享內存池

DM Server在啟動時從操作系統申請的一大片內存,稱之為共享內存池。

查看共享池使用狀態

動態視圖 V$MEM_POOL 詳細記錄了當前系統中所有的內存池的狀態。

select * from v$mem_pool;
共享內存池相關參數
grep 'MEMORY' dm.ini

主要關注2個參數:MEMORY_POOL 和 MEMORY_TARGET

  • MEMORY_POOL :共享內存池初始大小,以M為單位,默認為200M。數據庫系統運行過程中所需內存大於此參數值時,會自動擴展。有效值范圍:64~67108864。
  • MEMORY_EXTENT_SIZE:指定共享內存池每次擴展的大小
  • MEMORY_TARGET :共享內存池可擴充最大值,當超過該值后,空閑時會收縮到的大小。以M為單位,有效值范圍:0~67108864,0表示不限制
查看參數配置
select * from v$dm_ini where para_name in( 'MEMORY_POOL', 'MEMORY_EXTENT_SIZE', 'MEMORY_TARGET');

-- 獲取配置文件中參數值
SELECT SF_GET_PARA_VALUE(1, 'MEMORY_POOL');
修改共享內存大小
-- 重啟生效,MEMORY_POOL 是靜態參數
sp_set_para_value(2,'MEMORY_POOL',350);

運行時內存池

除了共享內存池外,DM Server中的功能模塊,在運行過程中向操作系統申請一片內存作為該功能模塊的內存池使用。如:會話內存池、虛擬機內存池等

緩沖區

分類

  1. 數據緩沖區
  2. 日志緩沖區
  3. 字典緩沖區
  4. SQL緩沖區

數據緩沖區

數據緩沖區是將數據頁寫入磁盤之前以及從磁盤上讀取數據頁之后,數據頁所存儲的區域。

DM Server啟動時,根據配置數據緩沖區大小(BUFFER)向操作系統申請一片連續內存並將其按數據頁大小進行格式化,並置入"自由"鏈中。

數據緩沖區存在三條鏈來管理被緩沖的數據頁:

  • “自由”鏈:用於存放目前尚未使用的內存數據頁,
  • “LRU”鏈:用於存放已被使用的內存數據頁(包括未修改和已修改),
  • “臟”鏈:用於存放已被修改過的內存數據頁。
類型

數據緩沖區有四種類型,分別是:NORMAL、KEEP、FAST和RECYCLE

配置參數
  1. BUFFER:指定NORMAL緩沖區大小,默認緩沖區為NORMAL。
  2. KEEP:設置KEEP緩沖區大小,將部分熱數據固定緩存在內存中。只能在表空間級別上配置
  3. RECYCLE:設置RECYCLE緩沖區大小,給臨時表空間使用
  4. FAST_POOL_PAGES:設置FAST緩沖區數據頁總數,FAST_POOL_PAGES 的值最多不能超過BUFFER 總頁數的一半
讀多頁

默認情況,每次I/O操作只讀取一頁。對於需要進行大量I/O操作的業務場景,將會嚴重影響系統性能。在此類場景中,可以通過指定MULTI_PAGE_GET_NUM參數(默認值為1頁)來控制每次讀取的頁數。必須衡量業務需求的情形之后在調整此參數

參數配置調整
查看參數的值
SELECT sp_set_para_value(1,'BUFFER');
調整BUFFER值
-- 靜態參數, 需要重啟生效
sp_set_para_value(2,'BUFFER',300);
推薦配置
  1. BUFFER:系統緩沖區大小為可用物理內存的 60%~80%
  2. BUFFER_POOLS:BUFFER 的分區數量,將一個大池分成多個大小相同的小池子。每個 BUFFER 分區的大小為 BUFFER/BUFFER_POOLS

日志緩沖區

用於存放重做日志的內存緩沖區。為了避免由於直接的磁盤IO而使系統性能受到影響,在運行過程中產生的日志並不會立即被寫入磁盤,而是先將其放置到日志緩沖區中。

可以指定RLOG_BUF_SIZE參數來控制日志緩沖區大小,日志緩沖區所占用的內存是從共享內存池中申請的,單位為頁數量,且大小必須為2的N次方,否則采用系統默認大小512頁

相關參數
select para_name,para_value from v$dm_ini where para_name like 'RLOG%';
  • Rlog_buf_size: 日志緩沖區的大小,單位 page
  • RLOG_POOL_SIZE:最大日志緩沖區的大小 (M)。
    • 內存小於16G:建議設置為256M
    • 內存大於16G,小於64G:建議設置為1024M
    • 當內存大於64G:建議設置為2048M。

字典緩沖區

存儲一些數據字典信息,如模式信息、表信息、列信息、觸發器信息等。

配置參數

通過DICT_BUF_SIZE參數設置字典緩沖區的大小,默認值為5M。建議改成50M以上

SQL緩沖區

SQL緩沖區為了提供在執行SQL語句過程中所需要的內存,包括計划、SQL語句和結果集緩存。

配置參數

通過CACHE_POOL_SIZE參數控制SQL緩沖區大小。通常情況下,在內存小於16G,建議設置為200M;內存大於16G,小於64G,建議設置為1024M;當內存大於64G時,建議設置為2048M。

排序區

提供數據排序操作所需要的內存空間。當內存不足以完成排序操作所需的量時,便會使用磁盤排序(即,TEMP表空間)

配置參數

  • SORT_BUF_SIZE:指定排序緩沖區的大小。
    • 在內存小於64G時建議設置為10M,大於64G時建議設置為512M
  • SORT_FLAG:指定排序機制,0:原排序機制;1:新排序機制。
    • 在內存大於64G時建議使用新排序機制,其他情況使用原排序機制。
  • SORT_BUF_GLOBAL_SIZE:當內存小於16G時,建議設置為500M,大於16G小於64G時建議設置為2000,當內存大於64G時,建議設置為5120M
  • SORT_BLK_SIZE:默認為 1M,新排序機制下,每個排序分片空間的大小,必須小於 SORT_BUF_GLOBAL_SIZE。

哈希區

為哈希連接而設定的緩沖區。

參數配置

  • HJ_BUF_SIZE:用來控制哈希連接的緩沖區大小。該值的大小可能會限制哈希連接的效率。
  • HJ_BUF_GLOBAL_SIZE :HASH 連接操作符的數據總緩存大小(>=HJ_BUF_SIZE),默認為500 M。
  • HAGR_BUF_GLOBAL_SIZE: HAGR、DIST、集合操作、SPL2、NTTS2 以及HTAB 操作符的數據總緩存大小(>= HAGR_BUF_SIZE),默認為500 M。
  • HAGR_BUF_SIZE: 單個 HAGR、DIST、集合操作、SPL2、NTTS2以及 HTAB 操作符的數據總緩存大小,默認值50M。

推薦值

  1. 在服務器物理內存小於16GB的情況下,建議使用默認值。

  2. 當物理內存大於16GB,小於64GB時,建議將HJ_BUF_SIZE 和 HAGR_BUF_SIZE 設置為500M。HAGR_BUF_GLOBAL_SIZE 和 HJ_BUF_GLOBAL_SIZE 設置為10000M以上。

  3. 當物理內存大於64GB時,建議將HJ_BUF_SIZE 和 HAGR_BUF_SIZE 設置為1000M。HAGR_BUF_GLOBAL_SIZE 和 HJ_BUF_GLOBAL_SIZE 設置為15000M以上。

數據庫內存相關參數

參數名 缺省值 屬性 說明
MAX_OS_MEMORY 100 靜態 DM服務器能使用的最大內存占操作系統物理內存與虛擬內存總和的百分比,有效值范圍(40~100)。當取值100時,服務器不進行內存的檢查 注:對於32位版本的DM服務器,虛擬內存最大為2G
MEMORY_POOL 200 靜態 共享內存池大小,以M為單位。共享內存池是由DM管理的內存。有效值范圍:32位平台為(642000),64位平台為(6467108864)
MEMORY_N_POOLS 1 靜態 共享內存池個數,有效值范圍(0~2048),0與1等價,即共享池不分片。分片時,每池的初始容量為MEMORY_POOL / MEMORY_N_POOLS, 但受最小初始容量為30M限制,因此實際分片數可能會小於MEMORY_N_POOLS,每個池的TARGET也按此方式由MEMORY_TARGET導出
MEMORY_TARGET 0 動態,系統級 共享內存池在擴充到此大小以上后,空閑時收縮回此指定大小,以M為單位,有效值范圍:32位平台為(02000),64位平台為(067108864),0表示不限制
MEMORY_EXTENT_SIZE 1 靜態 共享內存池每次擴充的大小,以M為單位,有效值范圍(1~10240)
MEMORY_LEAK_CHECK 0 動態,系統級 是否開啟內存泄漏檢測。0:否;1:是,此時系統對每一次內存分配都登記到動態視圖V$MEM_REGINFO中, 並在釋放時解除登記
MEMORY_MAGIC_CHECK 2 靜態 是否開啟對所有內存池的校驗。0:不開啟;1:開啟校驗,校驗碼基於分配出的塊地址計算,在被分配空間的頭部和尾部寫入校驗碼;2:增強校驗,在1的基礎上,如果是內存池分配的,則對尾部未使用空間也計算校驗碼,寫入未使用空間的頭部
HUGEPAGE_THRESHOLD 32 動態,系統級 如果從OS申請內存的尺寸大於等於 HUGEPAGE_THRESHOLD * 2M, 則嘗試先申請巨頁內存,若失敗再申請常規內存; 0表示不嘗試使用巨頁內存。有效值范圍(0~1024)。注:本參數僅對LINUX操作系統有效,使用巨頁內存需要對OS進行相關配置
MEMORY_BAK_POOL 4 靜態 系統備份內存池大小,以M為單位。系統備份內存池是由DM管理的內存。有效值范圍(2~10000)
HUGE_MEMORY_PERCENTAGE 50 靜態 指示HUGE_BUFFER中可以借用作常規內存分配的空間百分比,有效值為0~100。
HUGE_BUFFER 80 靜態 HUGE表使用的緩沖區大小,以M為單位。有效值范圍(80~1048576)
HUGE_BUFFER_POOLS 4 靜態 HUGE BUFFER系統分區數,每個HUGE BUFFER分區的大小為HUGE_BUFFER/HUGE_BUFFER_POOLS。有效值范圍(1~512)
BUFFER 100 靜態 系統緩沖區大小,以M為單位。推薦值:系統緩沖區大小為可用物理內存的60%~80%。有效值范圍(8~1048576)
BUFFER_POOLS 19 靜態 BUFFER系統分區數,每個BUFFER分區的大小為BUFFER/BUFFER_POOLS。有效值范圍(1~512)
FAST_POOL_PAGES 3000 靜態 快速緩沖區頁數。有效值范圍(0~99999999)。 FAST_POOL_PAGES的值最多不能超過BUFFER總頁數的一半,如果超過,系統會自動調整為BUFFER總頁數的一半
FAST_ROLL_PAGES 1000 靜態 BUFFER中FAST POOL回滾頁數量。有效值范圍(0~9999999),最多不超過FAST_POOL_PAGES的75%,如果超過,系統會自動調整。填充規則:將回滾表空間0號文件的0~FAST_ROLL_PAGE-1號頁填入FAST POOL中
KEEP 8 靜態 KEEP緩沖區大小,以M為單位。有效值范圍(8~1048576)
RECYCLE 64 靜態 RECYCLE緩沖區大小,以M為單位。有效值范圍(8~1048576)
RECYCLE_POOLS 19 靜態 RECYCLE緩沖區分區數,每個RECYCLE分區的大小為RECYCLE/RECYCLE_POOLS。有效值范圍(1~512)
MULTI_PAGE_GET_NUM 1 動態,系統級 緩沖區最多一次讀取的頁面數。有效值范圍(1~64) 注:當數據庫加密時不支持多頁讀取,此時DM.INI中此參數值無效
PRELOAD_SCAN_NUM 0 動態,系統級 數據頁首次預加載時連續掃描的頁數,有效值范圍(0~64)。取值為0時關閉數據頁預加載功能 注:PRELOAD_SCAN_NUM實際有效范圍為(0 ~ EXTENT_SIZE – 2),當大於EXTENT - 2時將會間接失效預加載
PRELOAD_EXTENT_NUM 0 動態,系統級 數據頁首次預加載的簇數量,有效值范圍(0~64)。取值為0時關閉數據頁預加載功能
SORT_FLAG 0 動態,會話級 排序機制,0:原排序機制;1:新排序機制
SORT_BUF_SIZE 2 動態,會話級 原排序機制下,排序緩存區最大值,以M為單位。有效值范圍(1~2048)
SORT_BUF_GLOBAL_SIZE 1000 動態,系統級 新排序機制下,排序全局內存使用上限,以M為單位。有效值范圍(10~4294967294)
SORT_BLK_SIZE 1 動態,會話級 新排序機制下,每個排序分片空間的大小,以M為單位,必須小於SORT_BUF_GLOBAL_SIZE。有效值范圍(1~50)
HAGR_HASH_SIZE 100000 動態,會話級 HAGR操作時,建立HASH表的桶個數。有效值范圍(10000~100000000)
MAL_LEAK_CHECK 0 動態,系統級 是否打開MAL內存泄露檢查。0:關閉;1:打開 MAL_LEAK_CHECK為1時,可查詢V$MAL_USING_LETTERS檢查MAL內存泄露。
HJ_BUF_GLOBAL_SIZE 500 動態,系統級 HASH 連接操作符的數據總緩存大小(>= HJ_BUF_SIZE),系統級參數,以M為單位。有效值范圍(10~500000)
HJ_BUF_SIZE 50 動態,會話級 單個HASH連接操作符的數據總緩存大小,以M為單位,必須小於HJ_BUF_GLOBAL_SIZE。有效值范圍(2~100000)
HJ_BLK_SIZE 1 動態,會話級 HASH連接操作符每次分配緩存(BLK)大小,以M為單位,必須小於HJ_BUF_SIZE。有效值范圍(1~50)
HAGR_BUF_GLOBAL_SIZE 500 動態,系統級 HAGR、DIST、集合操作、SPL2、NTTS2以及HTAB操作符的數據總緩存大小(>= HAGR_BUF_SIZE),系統級參數,以M為單位。有效值范圍(10~1000000)
HAGR_BUF_SIZE 50 動態,會話級 單個HAGR、DIST、集合操作、SPL2、NTTS2以及HTAB操作符的數據總緩存大小,以M為單位。有效值范圍(2~500000)。 如果HAGR_BUF_SIZE設置的值滿足范圍且大於HAGR_BUF_GLOBAL_SIZE,那么會在HAGR_BUF_GLOBAL_SIZE/2和500000兩個值中,選出較小的那個,作為新的HAGR_BUF_SIZE值。
HAGR_BLK_SIZE 1 動態,會話級 HAGR、DIST、集合操作、SPL2、NTTS2以及HTAB操作符每次分配緩存(BLK)大小,以M為單位,必須小於HAGR_BUF_SIZE。有效值范圍(1~50)
MTAB_MEM_SIZE 8 靜態 MTAB緩存BDTA占用內存空間的大小,以KB為單位,有效值范圍(1~1048576)
FTAB_MEM_SIZE 0 靜態 FTAB緩存BDTA占用內存空間的大小,以KB為單位。取值范圍為(0~64 * 1024)。0表示使用MTAB,大於0時才使用FTAB。當取值小於32時,FTAB_MEM_SIZE均使用32
MMT_SIZE 0 動態,會話級 是否使用MMT。0:不啟用;其他有效值:啟用,並確定單個映射文件大小,必須小於MMT_GLOBAL_SIZE。有效值范圍(0~64),單位MB
MMT_GLOBAL_SIZE 4000 動態,系統級 系統總共使用MMT的文件總大小,單位MB,有效值范圍(10~1000000),僅在MMT_SIZE大於0時有效
MMT_FLAG 1 動態,會話級 MMT存儲數據方式。1:按頁存儲;2:BDTA存儲。僅在MMT_SIZE大於0時有效
DICT_BUF_SIZE 5 靜態 字典緩沖區大小,以M為單位,有效值范圍(1~2048)。單位:MB
HFS_CACHE_SIZE 160 動態,系統級 HUGE表 I/U/D 時HDTA_BUFFER緩存池大小,單位為MB。有效值范圍(160~ 2000)
VM_STACK_SIZE 256 靜態 系統執行時虛擬機堆棧大小,單位為K,堆棧的空間是從操作系統中申請的,有效值范圍(64~256*1024)
VM_POOL_SIZE 64 靜態 系統執行時虛擬機內存池大小,在執行過程中用到的內存大部分是從這里申請的,它的空間是從操作系統中直接申請的,有效值范圍(32~1024*1024)
VM_POOL_TARGET 32768 靜態 虛擬機內存池能擴充到的最大大小,以KB為單位,有效值范圍(0~1010241024),0表示不限制
SESS_POOL_SIZE 64 動態,系統級 會話緩沖區大小,以KB為單位,有效值范圍(16~1024*1024)。若所申請的內存超過實際能申請的大小,則系統將按16KB大小重新申請
SESS_POOL_TARGET 32768 動態,系統級 會話緩沖區能擴充到的最大大小,以KB為單位,有效值范圍(0~1010241024),0表示不限制
RT_HEAP_TARGET 8192 動態,系統級 會話上用於動態對象存儲的RT_HEAP最大可擴展到的大小,以K為單位,有效值范圍(8192~1010241024)
VM_MEM_HEAP 0 動態,系統級 VM是否使用HEAP分配內存。0:MEMORY POOL模式;1:HEAP模式;2:MEMORY POOL和HEAP混合模式
RFIL_RECV_BUF_SIZE 16 靜態 控制服務器啟動時,進行REDO操作過程中,REDO日志文件恢復時BUFFER的大小,以MB為單位,有效值范圍(16~4000)
COLDATA_POOL_SIZE 0 動態,系統級 COLDATA池的大小,以M為單位
HAGR_DISTINCT_HASH_TABLE_SIZE 10000 動態,會話級 分組DISTINCT操作中HASH表的大小(桶數)。取值范圍為(10000~100000000)
CNNTB_HASH_TABLE_SIZE 100 動態,會話級 指定CNNTB操作符中創建HASH表的大小。有效值范圍(100~100000000)
GLOBAL_RTREE_BUF_SIZE 100 動態,會話級 R樹全局緩沖區大小,以MB為單位
SINGLE_RTREE_BUF_SIZE 10 動態,會話級 單個R樹的緩沖區大小,以MB為單位,必須小於GLOBAL_RTREE_BUF_SIZE
SORT_OPT_SIZE 1 靜態 整型/浮點型數據排序優化輔助空間大小,對應待排序數組的最大最小差值,單位M,有效值范圍(0~1024)。取值1M時對應待排序數組的最大最小差值為262144,超過則不能使用優化。
TSORT_OPT 1 動態,系統級 排序優化選項。0:排序操作一律使用估算的行數分配內存(至少2M);1:打開優化,排序操作結果行數較少時,使用實際的記錄行數分配內存

內存的使用情況

查詢內存池BUFFERPOOL的頁數、讀取頁數和命中率信息

SELECT NAME,N_PAGES,N_LOGIC_READS,RAT_HIT FROM V$BUFFERPOOL;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM