DM 数据库管理系统的内存结构主要包括内存池、缓冲区、排序区、哈希区等。根据系统中子模块的不同功能,对内存进行了上述划分,并采用了不同的管理模式。
DM内存管理系统优点:
1.申请、释放内存效率更高;
2.能够有效地了解内存的使用情况;
3.易于发现内存泄露和内存写越界的问题。
DM Server 的内存池包括共享内存池和其他一些运行时内存池。
动态视图 V$MEM_POOL 详细记录了当前系统中所有的内存池的状态,可通过查询这个动态视图掌握 DM Server 的内存使用情况。
也可以从DM性能监视工具中查看内存状态,如下图。
共享内存池是 DM Server 在启动时从操作系统申请的一大片内存。
在 DM Server 的运行期间,经常会申请与释放小片内存,而直接向操作系统申请和释放内存时需要发出系统调用,此时可能会引起线程切换,降低系统运行效率。于是 DM 采用共享内存池的方式:一次向操作系统申请一片较大内存,作为共享内存池。当系统在运行过程中需要申请小片内存时,可在共享内存池内进行申请,当用完该内存时,再释放掉,即归还给共享内存池。
DM 系统管理员可以通过 DM Server 的配置文件(dm.ini)来对共享内存池的大小进行设置,共享池大小的参数为 MEMORY_POOL,缺省大小为 500MB。如果在运行时所需内存大于配置值,共享内存池也可进行自动扩展,INI 参数 MEMORY_EXTENT_SIZE 指定了共享内存池每次扩展的大小,参数 MEMORY_TARGET 则指定了共享内存池扩展到超过该值后,空闲时会收缩到的大小。
除了共享内存池,DM Server 的一些功能模块在运行时还会使用自己的运行时内存池。这些运行时内存池是从操作系统申请一片内存作为本功能模块的内存池来使用,如会话内存池、虚拟机内存池等。
数据缓冲区是 DM Server 在将数据页写入磁盘之前以及从磁盘上读取数据页之后,数据页所存储的地方。这是 DM Server 至关重要的内存区域之一,将其设定得太小,会导致缓冲页命中率低,磁盘 IO 频繁;将其设定得太大,又会导致操作系统内存本身不够用。
系统启动时,首先根据配置的数据缓冲区大小向操作系统申请一片连续内存并将其按数据页大小进行格式化,并置入自由链中。数据缓冲区存在三条链来管理被缓冲的数据页,一条是自由链,用于存放目前尚未使用的内存数据页,一条是 LRU 链,用于存放已被使用的内存数据页(包括未修改和已修改),还有一条即为脏链,用于存放已被修改过的内存数据页。
LRU 链对系统当前使用的页按其最近是否被使用的顺序进行了排序。这样当数据缓冲区中的自由链被用完时,从 LRU 链中淘汰部分最近未使用的数据页,能够较大程度地保证被淘汰的数据页在最近不会被用到,减少 IO。
在系统运行过程中,通常存在一部分“非常热”(反复被访问)的数据页,将它们一直留在缓冲区中,对系统性能会有好处。对于这部分数据页,数据缓冲区开辟了一个特定的区域用于存放它们,以保证这些页不参与一般的淘汰机制,可以一直留在数据缓冲区中。
1.类别
DM Server 中有四种类型的数据缓冲区,分别是 NORMAL、KEEP、FAST 和 RECYCLE。其中,用户可以在创建表空间或修改表空间时,指定表空间属于 NORMAL 或 KEEP 缓冲区。RECYCLE 缓冲区供临时表空间使用,FAST 缓冲区根据用户指定的 FAST_POOL_PAGES 大小由系统自动进行管理,用户不能指定使用 RECYCLE 和 FAST 缓冲区的表或表空间。
NORMAL 缓冲区主要是提供给系统处理的一些数据页,没有特定指定缓冲区的情况下,默认缓冲区为 NORMAL;KEEP 的特性是对缓冲区中的数据页很少或几乎不怎么淘汰出去,主要针对用户的应用是否需要经常处在内存当中,如果是这种情况,可以指定缓冲区为 KEEP。
DM Server 提供了可以更改这些缓冲区大小的参数,用户可以根据自己应用需求情况,指定 dm.ini 文件中 BUFFER(8000MB)、KEEP(8MB)、RECYCLE(300MB)、FAST_POOL_PAGES(3000)值(括号中为默认值),这些值分别对应是 NORMAL 缓冲区大小、KEEP 缓冲区大小、RECYCLE 缓冲区大小、FAST 缓冲区数据页总数。
2.读多页
在需要进行大量 I/O 的应用当中,DM 之前版本的策略是每次只读取一页。如果知道用户需要读取表的大量数据,当读取到第一页时,可以猜测用户可能需要读取这页的下一页,在这种情况下,一次性读取多页就可以减少 I/O 次数,从而提高了数据的查询、修改效率。
DM Server 提供了可以读取多页的参数,用户可以指定这些参数来调整数据库运行效率的最佳状态。在 DM 配置文件 dm.ini 中,可以指定参数 MULTI_PAGE_GET_NUM 大小(默认值为 1 页),来控制每次读取的页数。
如果用户没有设置较适合的参数 MULTI_PAGE_GET_NUM 值大小,有时可能会给用户带来更差的效果。如果 MULTI_PAGE_GET_NUM 太大,每次读取的页可能大多都不是以后所用到的数据页,这样不仅会增加 I/O 的读取,而且每次都会做一些无用的 I/O,所以系统管理员需要衡量好自己应用需求,给出最佳方案。
日志缓冲区是用于存放重做日志的内存缓冲区。为了避免由于直接的磁盘 IO 而使系统性能受到影响,系统在运行过程中产生的日志并不会立即被写入磁盘,而是和数据页一样,先将其放置到日志缓冲区中。那么为何不在数据缓冲区中缓存重做日志而要单独设立日志缓冲区呢?主要是基于以下原因:
1.重做日志的格式同数据页完全不一样,无法进行统一管理;
2.重做日志具备连续写的特点;
3.在逻辑上,写重做日志比数据页 IO 优先级更高。
DM Server 提供了参数 RLOG_BUF_SIZE 对日志缓冲区大小进行控制,设置单个日志缓冲区大小,以日志页个数为单位。取值范围1~20480;
还提供了参数 RLOG_POOL_SIZE参数控制最大日志缓冲区大小,单位MB。取值范围1~4096;
当建库参数AUTO_ADJ_PARA为1时,本参数实际默认值由系统根据AUTO_ADJ_MEM自动调整,用户也可根据实际需要手动调整。具体可参考《DM8_dminit使用手册》
字典缓冲区主要存储一些数据字典信息,如模式信息、表信息、列信息、触发器信息等。每次对数据库的操作都会涉及到数据字典信息,访问数据字典信息的效率直接影响到相应的操作效率,如进行查询语句,就需要相应的表信息、列信息等,这些字典信息如果都在缓冲区里,则直接从缓冲区中获取即可,否则需要 I/O 才能读取到这些信息。
DM8 采用的是将部分数据字典信息加载到缓冲区中,并采用 LRU 算法进行字典信息的控制。缓冲区大小设置问题,如果太大,会浪费宝贵的内存空间,如果太小,可能会频繁的进行淘汰,该缓冲区配置参数为 DICT_BUF_SIZE,默认的配置大小为 50MB。
DM8 采用缓冲部分字典对象,那会影响效率吗?数据字典信息访问存在热点现象,并不是所有的字典信息都会被频繁的访问,所以按需加载字典信息并不会影响到实际的运行效率。
但是如果在实际应用中涉及对分区数较多的水平分区表访问,例如上千个分区,那么就需要适当调大 DICT_BUF_SIZE 参数值。
SQL 缓冲区提供在执行 SQL 语句过程中所需要的内存,包括计划、SQL 语句和结果集缓存。
很多应用当中都存在反复执行相同 SQL 语句的情况,此时可以使用缓冲区保存这些语句和它们的执行计划,这就是计划重用。这样带来的好处是加快了 SQL 语句执行效率,但同时给内存也增加了压力。
DM Server 在配置文件 dm.ini 提供了参数来支持是否需要计划重用,参数为 USE_PLN_POOL,当指定为非 0 时,则启动计划重用;为 0 时禁止计划重用。DM 同时还提供了参数 CACHE_POOL_SIZE(单位为 MB),来改变 SQL 缓冲区大小,系统管理员可以设置该值以满足应用需求,默认值为 0MB。
结果集缓存包括 SQL 查询结果集缓存和 DMSQL 程序函数结果集缓存,在 INI 参数文件中同时设置参数 RS_CAN_CACHE=1 且 USE_PLN_POOL 非 0 时 DM 服务器才会缓存结果集。DM 还提供了一些手动设置结果集缓存的方法,具体可参看《DM8系统管理员手册》22.10 结果集重用。
客户端结果集也可以缓存,但需要在配置文件 dm_svc.conf 中设置参数:
ENABLE_RS_CACHE = (1) //表示启用缓存;
RS_CACHE_SIZE = (100) //表示缓存区的大小为100MB, 可配置为1-65535
RS_REFRESH_FREQ = (30) //表示每30秒检查缓存的有效性,如果失效,自动重查; 0表示不检查。
同时在服务器端使用 INI 参数文件中的 CLT_CACHE_TABLES 参数设置哪些表的结果集需要缓存。另外,FIRST_ROWS 参数表示当查询的结果达到该行数时,就返回结果,不再继续查询,除非用户向服务器发一个 FETCH 命令。这个参数也用于客户端缓存的配置,仅当结果集的行数不超过 FIRST_ROWS 时,该结果集才可能被客户端缓存。
排序缓冲区提供数据排序所需要的内存空间。当用户执行 SQL 语句时,常常需要进行排序,所使用的内存就是排序缓冲区提供的。在每次排序过程中,都首先申请内存,排序结束后再释放内存。
DM Server 提供了参数来指定排序缓冲区的大小,参数 SORT_BUF_SIZE 在 DM 配置文件 dm.ini 中,系统管理员可以设置其大小以满足需求,由于该值是由系统内部排序算法和排序数据结构决定,建议使用默认值 20MB。
DM8 提供了为哈希连接而设定的缓冲区,不过该缓冲区是个虚拟缓冲区。之所以说是虚拟缓冲,是因为系统没有真正创建特定属于哈希缓冲区的内存,而是在进行哈希连接时,对哈希连接的数据量进行了计算。如果计算出的数据量大小超过了哈希缓冲区的大小,则使用 DM8 创新的外存哈希方式;如果没有超过哈希缓冲区的大小,实际上还是使用内存池来进行哈希操作。
DM Server 在 dm.ini 中提供了参数 HJ_BUF_SIZE 来进行控制,由于该值的大小可能会限制哈希连接的效率,所以建议保持默认值,或设置为更大的值。
除了提供 HJ_BUF_SIZE 参数外,DM Server 还提供了创建哈希表个数的初始化参数,其中,HAGR_HASH_SIZE 表示处理集函数时创建哈希表的个数,建议保持默认值 100000。
在DM8 中,dm.ini还提供了很多内存相关的参数,用于在生产上更好的根据现场条件来优化配置,如下表。
| 参数名 | 缺省值 | 属性 | 说明 |
|---|---|---|---|
| MAX_OS_MEMORY | 100 | 静态 | DM服务器能使用的最大内存占操作系统物理内存与虚拟内存总和的百分比,取值范围40~100。当取值100时,服务器不进行内存的检查 注:对于32位版本的DM服务器,虚拟内存最大为2G |
| MEMORY_POOL | 500 | 静态 | 共享内存池大小,单位MB。共享内存池是由DM管理的内存。取值范围:32位平台为642000,64位平台为6467108864 当建库参数AUTO_ADJ_PARA为1时,本参数实际默认值由系统根据AUTO_ADJ_MEM自动调整,用户也可根据实际需要手动调整。具体可参考《DM8_dminit使用手册》 |
| MEMORY_N_POOLS | 1 | 静态 | 共享内存池个数,取值范围0~2048,0与1等价,即共享池不分片。分片时,每池的初始容量为MEMORY_POOL / MEMORY_N_POOLS, 但受最小初始容量为30M限制,因此实际分片数可能会小于MEMORY_N_POOLS,每个池的TARGET也按此方式由MEMORY_TARGET导出 当建库参数AUTO_ADJ_PARA为1时,本参数实际默认值由系统根据AUTO_ADJ_MEM自动调整,用户也可根据实际需要手动调整。具体可参考《DM8_dminit使用手册》 |
| MEMORY_TARGET | 15000 | 动态,系统级 | 共享内存池在扩充到此大小以上后,空闲时收缩回此指定大小,单位MB,取值范围:32位平台为02000,64位平台为067108864,0表示不限制 当建库参数AUTO_ADJ_PARA为1时,本参数实际默认值由系统根据AUTO_ADJ_MEM自动调整,用户也可根据实际需要手动调整。具体可参考《DM8_dminit使用手册》 |
| MEMORY_EXTENT_SIZE | 32 | 静态 | 共享内存池每次扩充的大小,单位MB,取值范围1~10240 |
| MEMORY_LEAK_CHECK | 0 | 动态,系统级 | 是否开启内存泄漏检测。0:否;1:是,此时系统对每一次内存分配都登记到动态视图V$MEM_REGINFO中, 并在释放时解除登记 |
| MEMORY_MAGIC_CHECK | 1 | 静态 | 是否开启对所有内存池的校验。0:不开启;1:开启校验,校验码基于分配出的块地址计算,在被分配空间的头部和尾部写入校验码;2:增强校验,在1的基础上,如果是内存池分配的,则对尾部未使用空间也计算校验码,写入未使用空间的头部 |
| HUGEPAGE_THRESHOLD | 16 | 动态,系统级 | 如果从OS申请内存的尺寸大于等于 HUGEPAGE_THRESHOLD * 2MB, 则尝试先申请巨页内存,若失败再申请常规内存; 0表示不尝试使用巨页内存。取值范围0~1024。注:本参数仅对LINUX操作系统有效,使用巨页内存需要对OS进行相关配置 |
| MEMORY_BAK_POOL | 4 | 静态 | 系统备份内存池大小,单位MB。系统备份内存池是由DM管理的内存。取值范围2~2048 |
| HUGE_MEMORY_PERCENTAGE | 50 | 静态 | 指示HUGE_BUFFER中可以借用作常规内存分配的空间百分比,取值范围0~100 |
| HUGE_BUFFER | 80 | 静态 | HUGE表使用的缓冲区大小,单位MB。取值范围8~1048576 |
| HUGE_BUFFER_POOLS | 4 | 静态 | HUGE BUFFER系统分区数,每个HUGE BUFFER分区的大小为HUGE_BUFFER/HUGE_BUFFER_POOLS。取值范围1~10000 |
| BUFFER | 8000 | 静态 | 系统缓冲区大小,单位MB。推荐值:系统缓冲区大小为可用物理内存的60%~80%。取值范围8~16777216。在PAGE_SIZE 为4K的库中,BUFFER最大值为15728640。64位系统的缺省值为8000,32位系统的缺省值为64 当建库参数AUTO_ADJ_PARA为1时,本参数实际默认值由系统根据AUTO_ADJ_MEM自动调整,用户也可根据实际需要手动调整。具体可参考《DM8_dminit使用手册》 |
| BUFFER_POOLS | 19 | 静态 | BUFFER系统分区数,每个BUFFER分区的大小为BUFFER/BUFFER_POOLS。取值范围1~512 当建库参数AUTO_ADJ_PARA为1时,本参数实际默认值由系统根据AUTO_ADJ_MEM自动调整,用户也可根据实际需要手动调整。具体可参考《DM8_dminit使用手册》 |
| FAST_POOL_PAGES | 3000 | 静态 | 快速缓冲区页数。取值范围0~99999999。 FAST_POOL_PAGES的值最多不能超过BUFFER总页数的90%,如果超过,系统会自动调整为BUFFER总页数的90% |
| FAST_ROLL_PAGES | 1000 | 静态 | BUFFER中FAST POOL回滚页数量。取值范围09999999,最多不超过FAST_POOL_PAGES的75%,如果超过,系统会自动调整。填充规则:将回滚表空间0号文件的0FAST_ROLL_PAGE-1号页填入FAST POOL中 |
| KEEP | 8 | 静态 | KEEP缓冲区大小,单位MB。取值范围8~16777216 |
| RECYCLE | 300 | 静态 | RECYCLE缓冲区大小,单位MB。取值范围8~16777216 当建库参数AUTO_ADJ_PARA为1时,本参数实际默认值由系统根据AUTO_ADJ_MEM自动调整,用户也可根据实际需要手动调整。具体可参考《DM8_dminit使用手册》 |
| RECYCLE_POOLS | 19 | 静态 | RECYCLE缓冲区分区数,每个RECYCLE分区的大小为RECYCLE/RECYCLE缓冲区分区数。取值范围1~512。一般情况下,每个RECYCLE分区的大小为RECYCLE/RECYCLE_POOLS,但系统也会自动校正RECYCLE缓冲区分区数,以保证每个分区中数据页不少于3000页 当建库参数AUTO_ADJ_PARA为1时,本参数实际默认值由系统根据AUTO_ADJ_MEM自动调整,用户也可根据实际需要手动调整。具体可参考《DM8_dminit使用手册》 |
| MULTI_PAGE_GET_NUM | 1 | 静态 | 是否开启缓冲区多页读取接口。取值范围164。取值1表示关闭多页读接口,取值264的效果一致,表示启动多页读接口。多页读接口一定由预加载调用,其它情况不会调用。当ENABLE_FREQROOTS值非0时,为开启动态FAST POOL填充模式,此时系统会强制调整MULTI_PAGE_GET_NUM=1,并关闭预加载功能。 注:当数据库加密时不支持多页读取,此时dm.ini中此参数值无效 |
| PRELOAD_SCAN_NUM | 0 | 动态,系统级 | 数据页首次预加载时连续扫描的页数,取值范围0~64。取值为0时关闭数据页预加载功能。 注:PRELOAD_SCAN_NUM实际有效范围为0 ~ EXTENT_SIZE – 2,当大于EXTENT_SIZE - 2时将会间接失效预加载 |
| PRELOAD_EXTENT_NUM | 0 | 动态,系统级 | 数据页首次预加载的簇数量,取值范围0~64。取值为0时关闭数据页预加载功能 |
| SORT_FLAG | 1 | 动态,会话级 | 排序机制。 0:原排序机制,普通排序方式,按照排序缓冲区SORT_BUF_SIZE大小获取数据,并进行排序; 1:新排序机制,大内存排序方式,将大内存排序缓冲区SORT_BUF_GLOBAL_SIZE按照内存片大小SORT_BLK_SIZE进行分片,并对每个内存片进行排序,再对整个大内存排序缓冲区的数据进行排序; 2:采用SORT_FLAG为0的排序方式的同时,增加递增列,当排序列存在相同值时按递增列进行排序; 3:采用SORT_FLAG为1的排序方式的同时,增加递增列,当排序列存在相同值时按递增列进行排序 当建库参数AUTO_ADJ_PARA为1时,本参数实际默认值由系统根据AUTO_ADJ_MEM自动调整,用户也可根据实际需要手动调整。具体可参考《DM8_dminit使用手册》 |
| SORT_BUF_SIZE | 20 | 动态,会话级 | 原排序机制下,排序缓存区最大值,单位MB。取值范围1~2048 当建库参数AUTO_ADJ_PARA为1时,本参数实际默认值由系统根据AUTO_ADJ_MEM自动调整,用户也可根据实际需要手动调整。具体可参考《DM8_dminit使用手册》 |
| SORT_BUF_GLOBAL_SIZE | 1000 | 动态,系统级 | 新排序机制下,排序全局内存使用上限,单位MB。取值范围10~4294967294。该值须大于SORT_BUF_SIZE的值,否则会在重启时被重置为SORT_BUF_SIZE两倍和100之间的最大值 当建库参数AUTO_ADJ_PARA为1时,本参数实际默认值由系统根据AUTO_ADJ_MEM自动调整,用户也可根据实际需要手动调整。具体可参考《DM8_dminit使用手册》 |
| SORT_BLK_SIZE | 1 | 动态,会话级 | 新排序机制下对数据进行排序的排序缓冲区分片大小,单位MB。取值范围1~50。 SORT_BLK_SIZE一般不需要设置太大,该内存片大小能容纳1万至5万行待排序的数据即可。该值须小于等于SORT_BUF_SIZE,否则会在重启时被重置为SORT_BUF_SIZE。为了保证归并排序的效率,对于大内存排序缓冲区的总的分片个数系统上限为10000个,因此,当SORT_BUF_GLOBAL_SIZE足够大的时候,为了保证大内存排序缓冲区能容纳足够多的数据,需要适当调大SORT_BLK_SIZE。例如,当SORT_BLK_SIZE为1时,SORT_BUF_GLOBAL_SIZE的最大可用值为10000。如果SORT_BUF_GLOBAL_SIZE需要20000M可用空间排序时,需要设置SORT_BLK_SIZE最小为2 当建库参数AUTO_ADJ_PARA为1时,本参数实际默认值由系统根据AUTO_ADJ_MEM自动调整,用户也可根据实际需要手动调整。具体可参考《DM8_dminit使用手册》 |
| SORT_BUF_SINGLE_SIZE | 10000 | 动态,会话级 | 控制单个排序操作符内存使用上限,大内存排序场景(参数SORT_FLAG取值包含1时)有效。在允许的取值范围内,内部还将检查其取值是否合理,SORT_BUF_SINGLE_SIZE的合理取值应该大于或等于SORT_BLK_SIZE且小于或等于SORT_BUF_GLOBAL_SIZE。取值范围1~4294967294 ,单位MB。 |
| 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 | 5000 | 动态,系统级 | HASH 连接操作符的数据总缓存大小,单位MB。取值范围10~500000。该值须大于HJ_BUF_SIZE的值,否则会在尝试使用系统函数修改为非法值或在DM.INI中指定为非法值后,被重置为HJ_BUF_SIZE两倍和500之间的最大值 当建库参数AUTO_ADJ_PARA为1时,本参数实际默认值由系统根据AUTO_ADJ_MEM自动调整,用户也可根据实际需要手动调整。具体可参考《DM8_dminit使用手册》 |
| HJ_BUF_SIZE | 500 | 动态,会话级 | 单个HASH连接操作符的数据总缓存大小,单位MB。取值范围2~100000。该值须小于HJ_BUF_GLOBAL_SIZE的值,否则会在尝试使用系统函数修改为非法值时,被重置为HJ_BUF_GLOBAL_SIZE/2与100000之间的最小值 当建库参数AUTO_ADJ_PARA为1时,本参数实际默认值由系统根据AUTO_ADJ_MEM自动调整,用户也可根据实际需要手动调整。具体可参考《DM8_dminit使用手册》 |
| HJ_BLK_SIZE | 2 | 动态,会话级 | HASH连接操作符每次分配缓存(BLK)大小,单位MB。取值范围1~50。该值须小于等于HJ_BUF_SIZE的值,否则会在尝试使用系统函数修改为非法值或在DM.INI中指定为非法值后,被重置为HJ_BUF_SIZE |
| HAGR_BUF_GLOBAL_SIZE | 5000 | 动态,系统级 | 分组、嵌套连接、集合运算、分析函数运算、统计信息、DISTINCT、临时表、TOP、ESEND操作符的数据总缓存大小,单位MB。取值范围10~1000000。该值须大于等于HAGR_BUF_SIZE,否则会在尝试使用系统函数修改为非法值或在DM.INI中指定为非法值后,被重置为两倍HAGR_BUF_SIZE和500之间的最大值 当建库参数AUTO_ADJ_PARA为1时,本参数实际默认值由系统根据AUTO_ADJ_MEM自动调整,用户也可根据实际需要手动调整。具体可参考《DM8_dminit使用手册》 |
| HAGR_BUF_SIZE | 500 | 动态,会话级 | 单个分组、嵌套连接、集合运算、分析函数运算、统计信息、DISTINCT、临时表、TOP、ESEND操作符的数据总缓存大小,单位MB。取值范围2~500000。该值须小于HAGR_BUF_GLOBAL_SIZE的值,否则会在尝试使用系统函数修改为非法值时,被重置为HAGR_BUF_GLOBAL_SIZE/2与500000之间的最小值 当建库参数AUTO_ADJ_PARA为1时,本参数实际默认值由系统根据AUTO_ADJ_MEM自动调整,用户也可根据实际需要手动调整。具体可参考《DM8_dminit使用手册》 |
| HAGR_BLK_SIZE | 2 | 动态,会话级 | 分组、嵌套连接、集合运算、分析函数运算、统计信息、DISTINCT、临时表、TOP、ESEND操作符每次分配缓存(BLK)大小,单位MB。取值范围1~50。该值须小于等于HAGR_BUF_SIZE的值,否则会在尝试使用系统函数修改为非法值或在DM.INI中指定为非法值后,被重置为HAGR_BUF_SIZE |
| 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。 FTAB功能已废弃 |
| 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 | 50 | 静态 | 字典缓冲区大小,单位MB,取值范围1~67108864 当建库参数AUTO_ADJ_PARA为1时,本参数实际默认值由系统根据AUTO_ADJ_MEM自动调整,用户也可根据实际需要手动调整。具体可参考《DM8_dminit使用手册》 |
| HFS_CACHE_SIZE | 160 | 动态,系统级 | HUGE表 I/U/D 时HDTA_BUFFER缓存池大小,单位为MB。取值范围160~2000 |
| VM_STACK_SIZE | 256 | 静态 | 系统执行时虚拟机堆栈大小,单位KB,堆栈的空间是从操作系统中申请的,取值范围64~256*1024) |
| VM_POOL_SIZE | 64 | 静态 | 系统执行时虚拟机内存池大小,单位KB,在执行过程中用到的内存大部分是从这里申请的,它的空间是从操作系统中直接申请的,取值范围32~1024*1024 |
| VM_POOL_TARGET | 16384 | 静态 | 虚拟机内存池能扩充到的最大大小,单位KB,取值范围0~1010241024,0表示不限制 当建库参数AUTO_ADJ_PARA为1时,本参数实际默认值由系统根据AUTO_ADJ_MEM自动调整,用户也可根据实际需要手动调整。具体可参考《DM8_dminit使用手册》 |
| SESS_POOL_SIZE | 64 | 动态,系统级 | 会话缓冲区大小,单位KB,取值范围16~1024*1024。若所申请的内存超过实际能申请的大小,则系统将按16KB大小重新申请 |
| SESS_POOL_TARGET | 16384 | 动态,系统级 | 会话缓冲区能扩充到的最大大小,单位KB,取值范围0~1010241024,0表示不限制 当建库参数AUTO_ADJ_PARA为1时,本参数实际默认值由系统根据AUTO_ADJ_MEM自动调整,用户也可根据实际需要手动调整。具体可参考《DM8_dminit使用手册》 |
| RT_HEAP_TARGET | 8192 | 动态,系统级 | 会话上用于动态对象存储的RT_HEAP最大可扩展到的大小,单位KB,取值范围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 |
| 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 | 0 | 静态 | 整型/浮点型数据排序优化辅助空间大小,单位MB,取值范围0~1024。取值0M时不使用优化;取值1M时对应待排序数组中元素的最大最小差值为262144,超过则不能使用优化 |
| TSORT_OPT | 1 | 动态,系统级 | 排序优化选项。0:排序操作一律使用估算的行数分配内存(至少2M);1:打开优化,排序操作结果行数较少时,使用实际的记录行数分配内存 |
| BIND_PLN_PERCENT | 30 | 静态 | 固定计划占据计划缓存空间的最大比例,取值范围0~100 |
| FBACK_HASH_SIZE | 10000 | 动态,系统级 | 闪回系统中HASH表的桶个数。取值范围10000~1000000 |
| XBOX_MEMORY_TARGET | 1024 | 动态,系统级 | DMDPC环境下专用,当XBOX系统内存在扩充到此大小以上后,空闲时收缩回此指定大小,单位MB。取值范围1024~262144 |
| POOL_CLEAR_FLAG | 0 | 静态 | 内存池释放时是否全部清理,不全部清理时保留TARGET的内存。1:是;0:否 |
| REGEX_MEM_LIMIT | 20 | 静态 | 限制对于正则表达式第三方库允许使用的内存上限,单位MB,取值范围0~8102。0表示不限制,当设置值小于10时无效,系统会强制设置为10 |
| IDLE_MEM_THRESHOLD | 50 | 动态,系统级 | 可用物理内存的报警阈值,单位MB,取值范围10~6000 |
文章
阅读量
获赞
