DM内存管理

一、内存的基本构成

Dm内存池可以分成三部分:缓冲区、内存池、其他内存区。

二、实现策略

每个内存对象的三个重要属性:初始大小(original size),增量大小(extend size)
和目标大小(target size)。目标大小必须大于等于初始大小。
当一个内存池被创建的时候,服务器会申请初始大小(original size)的内存。当内存池内可用资源不够时,内存池会自动扩展,以增量大小(extend size)申请新资源。当内存池的资源占用达到预设目标(target size),依旧能够扩展,但是扩展策略有变化,不再是固定的增量大小(extend size),而是由实际的申请对象大小决定。严格来说,超过目标大小(target size)的内存不属于这个内存池,当使用对象被释放后,相关资源会被直接释放,内存池对象的资源使用收缩到目标大小(target size)。

三、sql在内存的历程

在这里插入图片描述

四、相关参数

1、 MAX_OS_MEMORY:一般设置为80/75,DM 服务器能使用的最大内存占操作系统物理内存的百分比;虚拟内存=物理内存+swap 空间;(一般限制不了内存的使用,即使超过这个值,内存也会扩展(根据实际内存需求申请))。

2、 MEMORY_POOL:共享内存池的大小,内存充足的情况下建议放大,一般是设置为总内存的1/3。

3、 MEMORY_N_POOLS:共享内存池分片,一般设置为质数,减少临界区冲突,并发情况下可以放大。

4、 MEMORY_TARGET:共享内存池扩充上限,超过该值,空闲会回缩到该值,大于等级memory_pool。

5、 MEMORY_LEAK_CHECK:开启内存泄漏检测。0:否;1:是,此时系统对每一次内存分配都登记到动态视图 MEM_REGINFO 中, 并在释放时解除登记。

6、 MEMORY_MAGIC_CHECK:开启对所有内存池的校验。0:不开启;1:开启校验,校验码基于分配出的块地址计算,在被分配空间的头部和尾部写入校验码;2:增强校验,在 1 的基础上,如果是内存池分配的,则对尾部未使用空间也计算校验码,写入未使用空间的头部 。

7、 MEMORY_BAK_POOL:系统备份内存池大小;当常规内存申请都失败时,从这 个备用池申请;若发现系统使用备份内存池时,此时系统处于极度危险中,随时可能会 halt,需要尽量人工干预 。

8、HUGE_BUFFER/BUFFER:数据缓冲区用于缓存使用的数据块,增加逻辑读的次数, 提高修改和查询的性能。 为了加速数据访问,系统开辟了一个缓冲区,使用 LRU 算法存放经常访问的数据页,逐步淘汰不用的数据页。

9、HUGE_BUFFER :是专门用于列存表的缓存区,BUFFER 是用户行存表的系统缓冲区。一般设置占用内存的1/3。

10、BUFFER_POOLS: 高并发下建议调大,建议是质数,数据缓冲区的分片。

11、RECYCLE:RECYCLE 的淘汰算法与 BUFFER 完全一样,引入 RECYCLE
的目的是防止某些复杂查询的中间结果挤占大量的 BUFFER 空间,降低 BUFFER 的命中率,从而增加额外的 IO 操作。
使用 RECYCLE 的场景主要有:
●大表的散列连接,在内存达到 HJ_BUF_SIZE 时使用
●排序,大数据量的排序操作,
●蓄水池操作符,如:NTTS, SPL, HTAB 等,这些操作符
需要把数据收集在一起
●临时表数据
●MAL 系统中,堆积的邮件
●并行查询中,堆积的消息
●大字段的临时数据

12、RECYCLE_POOLS:默认即可,RECYCLE 的分区数;减少冲突,提升并发性能;。

13、 SORT_BUF_SIZE:并发下尽量设置小一点;一般够用就行,通过查看 v$mtab_used_history 来确定是否刷盘,若有刷盘说明设置小了。 若是创建索引需要设置大一点,防止刷盘导致创建索引比较慢。可以通过 SF_SI 函数输入索引创建语句,返回该索引创建的排序区大小的建议值。
排序分为内排序和外排序两种,内排序指所有的排序可以在内存中完成,外排序指的是需要排序的数据不能完全放入内存,这是需要将部分内存中的数据刷到磁盘上, 最终再进行归并完成整个排序。对于内排序,仅受参数 SORT_BUF_SIZE 影响,但是需要注意的是,每个会话在执行 SORT 时都会根据 SORT_BUF_SIZE 申请内存,此参数不宜配置过大。对于外排序其具体大小受 SORT_BUF_SIZE 影响,内存放不下的部分根据配置有三种处理方式: MTAB(普通临时表)、FTAB(临时文件表)、MMT(内存映射表)。

14、SORT_BUF_GLOBAL_SIZE:SORT_FLAG(排序机制,0 表示原排序机制;1 表示新排序机制)、SORT_BUF_SIZE(原排序机制下,排序缓存区最大值,M 为单位)、SORT_BUF_GLOBAL_SIZE(新排序机制下, 排序全局内存使用上限,以 M 为单位)、SORT_BLK_SIZE(新排序机制下,每个排序分片空间的大小,以 M 为单位)。 (采用原排序机制,每个会话 sql 排序区就申请SORT_BUF_SIZE 大小的内存区;若采用新排序机制,排序区分片,分片大小由SORT_BLK_SIZE 决定,上限由SORT_BUF_GLOBAL_SIZE 决定。)
SORT_FLAG=0:所有数据放在一个 bdta 里面。缺点:数据量比较大,sort_buf_size 不够,就会导致刷盘,影响性能。解决的方法就是调大 sort_buf_size(最大只有 2G), 让数据尽可能在内存中,并一次完成排序; SORT_FLAG=1:所有数据按照 sort_blk_size 拆分为多个小数据量的 bdta。默认 dbta 一万个,超过一万个刷盘 (mtab) ;

15、HJ_BUF_GLOBAL_SIZE:指定 DM 中同时进行的 HASH 连接一共可使用的最大内存。如果系统需要同时做很多个 HASH 连接,可以考虑增大这个参数的值。此参数值只是一个上限,增大它并不表示实际分配这么多的内存。当 HASH连接申请空间超过参数值,会使用磁盘进行数据处理。
在这里插入图片描述
16、HJ_BUF_SIZE:指定单个HASH 连接可使用的最大内存大小,其参数值不能超过 HJ_BUF_GLOBAL_SIZE 参数值。 当应用为非并发类型时,可以适当将 HJ_BUF_SIZE 设大 一些,充分利用内存,提高 HASH 连接的性能;若应用为高并发类型,为了均衡各个会话中 HASH 连接的内存使用, 建议调小参数值, HJ_BUF_GLOBAL_SIZE 至少是HJ_BUF_SIZE 的倍数。

17、 HAGR_BUF_GLOBAL_SIZE:在 DM 中,分组、集合运算、统计信息、DISTINCT、临时表、TOP 等操作均会使用此空间。用户应根据应用操作的数据量进行参数设置, 在内存允许的情况下可将 HAGR_BUF_GLOBAL_SIZE 设大一些,尽量满足实际需要。

18、HAGR_BUF_SIZE:当应用为非并发类型时,可以适当将 HAGR_BUF_SIZE 设大一些,提高 HASH 分组的性能;若应用为高并发类型,需要将此参数设小一些,HAGR_BUF_GLOBAL_SIZE 至少是HAGR_BUF_SIZE 的一定倍数,保证每个并发的会话都有足够使用的 HASH 分组内存。

19、DICT_BUF_SIZE:字典缓冲区主要存储一些数据字典信息,如模式信息、表信息、列信息、触发器信息等。每次对数据库的操作都会涉及到数据字典信息,访问数据字典信息的效率直接影响到相应的操作效率。DICT_BUF_SIZE 控制(M 为单位),若实际应用中涉及对分区数较多的水平分区表的访问,可适当调大该值。

20、CACHE_POOL_SIZE :sql 缓冲区提供在执行 sql 语句过程中所需要的内存,包括包信息、计划、sql 语句和结果集缓存。INI 参数 USE_PLN_POOL 用来指定是否需要计划重用,取值非 0 则启动计划重用,为 0 则禁止计划重用。对于 SQL 类别较多,或 package 较多、复杂的系统,可调大该参数。

21、VM_POOL_SIZE:系统执行时虚拟机内存池大小,在执行过程中用到的内存大部分是从这里申请的。当系统中存储过程、存储函数、包等对象较多时,此参数可以适当放大。

22、SESS_POOL_SIZE:会话缓冲区能扩充到的最大大小。

23、RLOG_BUF_SIZE:为了避免由于直接的磁盘 io 而使系统性能受到影响,系统在运行过程中产生的日志并不会立即被写入磁盘,而是和数据页一样,先将其放到日志缓冲区中。由于重做日志的格式与数据页完全不同,且重做日志具有连续写的特点,并且逻辑上,写重做日志比写数据页 IO 优先级更高,所以将数据缓冲区与重做日志缓冲区区分开来。 Rlog_buf_size:日志缓冲区的大小 单位:page 大小设置为 2 的幂。Rlog_pool_size:最大日志缓冲区的大小 : 单位 M;机制是:每 3 秒写一次,或者是当我们提交的时
候,commit。

五、TOP 命令中与内存相关解释

VIRT:virtual memory usage 虚拟内存
1、进程“需要的”虚拟内存大小,包括进程使用的库、代码、数据,以及 malloc、new 分配的
堆空间和分配的栈空间等;
2、假如进程新申请 10MB 的内存,但实际只使用了 1MB,那么它会增长 10MB,而不是实际的
1MB 使用量。
3、VIRT = SWAP + RES
向操作系统申请的内存,例如:char * p = new char [10241024512];
RES:resident memory usage 常驻内存
1、进程当前使用的内存大小,包括使用中的 malloc、new 分配的堆空间和分配的栈空间,但
不包括 swap out 量;
2、包含其他进程的共享;
3、如果申请 10MB 的内存,实际使用 1MB,它只增长 1MB,与 VIRT 相反;
4、关于库占用内存的情况,它只统计加载的库文件所占内存大小。
5、RES = CODE + DATA
Res 是真实使用的内存;例如:memset(p, 0, 1024 * 1024 * 10);
SHR:shared memory 共享内存
1、除了自身进程的共享内存,也包括其他进程的共享内存
2、虽然进程只使用了几个共享库的函数,但它包含了整个共享库的大小
3、计算某个进程所占的物理内存大小公式:RES – SHR
4、swap out 后,它将会降下来
DATA
1、数据占用的内存。如果 top 没有显示,按 f 键可以显示出来。
2、真正的该程序要求的数据空间,是真正在运行中要使用的。
注意:
o VIRT 进程使用的虚拟内存总量,单位 kb。VIRT=SWAP+RES
p SWAP 进程使用的虚拟内存中,被换出的大小,单位 kb。
q RES 进程使用的、未被换出的物理内存大小,单位 kb。RES=CODE+DATA
r CODE 可执行代码占用的物理内存大小,单位 kb
s DATA 可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位 kb
t SHR 共享内存大小,单位 kb
如果程序占用实存比较多,说明程序申请内存多,实际使用的空间也多。
如果程序占用虚存比较多,说明程序申请来很多空间,但是没有使用。

六、总结

内存简单的总结为下图所示。
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
压缩包包含了三本手册,分别是DM7系统管理员手册、DM7程序员手册和DM8系统管理员手册 第一部分 数据库体系架构 .........................................................................................1 第 1 章 DM 逻辑结构概述 ..................................................................................1 1.1 数据库和实例 ..........................................................................................................1 1.1.1 数据库 ......................................................................................................1 1.1.2 实例 ..........................................................................................................1 1.2 DM 逻辑存储结构 ...................................................................................................1 1.2.1 表空间 ......................................................................................................2 1.2.2 记录 ..........................................................................................................3 1.2.3 页 ..............................................................................................................3 1.2.4 簇 ..............................................................................................................4 1.2.5 段 ..............................................................................................................4 第 2 章 DM 物理存储结构 ..................................................................................6 2.1 配置文件 ..................................................................................................................6 2.1.1 DM 数据库服务配置 ................................................................................7 2.1.2 复制配置 ................................................................................................47 2.2 控制文件 ................................................................................................................49 2.3 数据文件 ................................................................................................................50 2.4 重做日志文件 ........................................................................................................51 2.5 归档日志文件 ........................................................................................................51 2.6 逻辑日志文件 ........................................................................................................51 2.7 备份文件 ................................................................................................................52 2.8 跟踪日志文件 ........................................................................................................52 2.9 事件日志文件 ........................................................................................................53 2.10 数据重演文件 ........................................................................................................53 第 3 章 DM 内存结构 ........................................................................................54 3.1 内存池 ....................................................................................................................54 3.1.1 共享内存池 ............................................................................................54 3.1.2 运行时内存池 ........................................................................................54 3.2 缓冲区 ....................................................................................................................54 3.2.1 数据缓冲区 ............................................................................................54 3.2.2 日志缓冲区 ............................................................................................55 3.2.3 字典缓冲区 ............................................................................................56 3.2.4 SQL 缓冲区 ............................................................................................56 3.3 排序区 ....................................................................................................................56 3.4 哈希区 ....................................................................................................................57 3.5 SSD 缓冲区 ............................................................................................................57 I 目录 第 4 章 管理 DM 线程 .......................................................................................58 4.1 监听线程 ................................................................................................................58 4.2 工作线程 ................................................................................................................58 4.3 IO 线程 ...................................................................................................................58 4.4 调度线程 ................................................................................................................59 4.5 日志 FLUSH 线程 .................................................................................................59 4.6 日志归档线程 ..................................................................

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值