news 2026/4/18 13:34:33

DM 内存结构

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
DM 内存结构

内存结构

数据库管理系统是一种对内存申请和释放操作频率很高的软件,如果每次对内存的使用 都使用操作系统函数来申请和释放,效率会比较低,加入自己的内存管理是 DBMS 系统所必 须的。通常内存管理系统会带来以下好处: 1. 申请、释放内存效率更高; 2. 能够有效地了解内存的使用情况; 3. 易于发现内存泄露和内存写越界的问题。 DM 数据库管理系统的内存结构主要包括内存池、缓冲区、排序区、哈希区等。根据系 统中子模块的不同功能,对内存进行了上述划分,并采用了不同的管理模式。

DM 数据库管理系统的内存结构主要包括内存池、缓冲区、排序区、哈希区等。

DM 内存池

DM Server 的内存池包括共享内存池和其他一些运行时内存池 动态视图 V$MEM_POOL 详细记录了当前系统中所有的内存池的状态,可通过查询这个动态视图掌握 DM Server 的内存使用情况。

共享内存池

共享内存池是 DM Server 在启动时从操作系统申请的一大片内存。 共享池大小的参数为 MEMORY_POOL,缺省大小为 500MB。如果在运行时所需内存 大于配置值,共享内存池也可进行自动扩展,INI 参数 MEMORY_EXTENT_SIZE 指定了共享 内存池每次扩展的大小,参数 MEMORY_TARGET 则指定了共享内存池扩展到超过该值后, 空闲时会收缩到的大小。

缓冲区

数据缓冲区

数据缓冲区是 DM Server 在将数据页写入磁盘之前以及从磁盘上读取数据页之后,数据 页所存储的地方。这是 DM Server 至关重要的内存区域之一,将其设定得太小,会导致缓冲 页命中率低,磁盘 IO 频繁;将其设定得太大,又会导致操作系统内存本身不够用。 DM Server 中有四种类型的数据缓冲区,分别是 NORMAL、KEEP、FAST 和 RECYCLE。 用户可以在创建表空间或修改表空间时,指定表空间属于 NORMAL 或 KEEP 缓冲区。 RECYCLE 缓冲区供临时表空间使用,FAST 缓冲区根据用户指定的 FAST_POOL_PAGES 大 小由系统自动进行管理,用户不能指定使用 RECYCLE 和 FAST 缓冲区的表或表空间。 NORMAL 缓冲区主要是提供给系统处理的一些数据页,没有特定指定缓冲区的情况下, 默认缓冲区为 NORMAL;KEEP 的特性是对缓冲区中的数据页很少或几乎不怎么淘汰出去, 主要针对用户的应用是否需要经常处在内存当中,如果是这种情况,可以指定缓冲区为 KEEP。 用户可以根据自己应用需求情况, 指 定 dm.ini 文 件 中 BUFFER(1000MB) 、 KEEP(8MB) 、 RECYCLE(300MB) 、 FAST_POOL_PAGES(3000)值(括号中为默认值),这些值分别对应是 NORMAL 缓冲区 大小、KEEP 缓冲区大小、RECYCLE 缓冲区大小、FAST 缓冲区数据页总数。

读多页

可以指定参数 MULTI_PAGE_GET_NUM 大小(默认值为 1 页),来控制每次读取的页数。

日志缓冲区

日志缓冲区是用于存放重做日志的内存缓冲区。为了避免由于直接的磁盘 IO 而使系统 性能受到影响,系统在运行过程中产生的日志并不会立即被写入磁盘,而是和数据页一样, 先将其放置到日志缓冲区中。

字典缓冲区

字典缓冲区主要存储一些数据字典信息,如模式信息、表信息、列信息、触发器信息等。 每次对数据库的操作都会涉及到数据字典信息,访问数据字典信息的效率直接影响到相应的 操作效率,如进行查询语句,就需要相应的表信息、列信息等,这些字典信息如果都在缓冲 区里,则直接从缓冲区中获取即可,否则需要 I/O 才能读取到这些信息。 缓冲区配置参数为 DICT_BUF_SIZE,默认的配置大小为 50MB。 检查表对象EMPLOYEE 是否缓存在数据字典缓存中 select * from SYS.V$DICT_CACHE_ITEM where name like 'EMPLOYEE'

SQL 缓冲区

SQL 缓冲区提供在执行 SQL 语句过程中所需要的内存,包括计划、SQL 语句和结果集缓存。 参数 USE_PLN_POOL 当指定为非 0 时,则启动计划重用;为 0 时禁止计划重用。 CACHE_POOL_SIZE(单位为 MB),来改变 SQL 缓冲区大小,系统管理员可以设置该值以满足应用需求,默认值为 100MB。 结果集缓存包括 SQL 查询结果集缓存和 DMSQL 程序函数结果集缓存,在 INI 参数文件 中同时设置参数 RS_CAN_CACHE=1 且 USE_PLN_POOL 非 0 时 DM 服务器才会缓存结果集。 DBA 可以通过在 SQL 语句中设置 “RESULT_CACHE”或“NO_RESULT_CACHE” HINT 手动指示查询的结果集是否缓存。如 select /*+ RESULT_CACHE */ id, name from sysobjects; 或者 SELECT /*+ NO_RESULT_CACHE */ id, name from sysobjects; 在语句中使用 HINT 指定结果集缓存的优先级要高于 INI 中相关参数的设置。 还可以使用系统过程 SP_SET_PLN_RS_CACHE 来强制设置指定计划结果集缓存的生 效及失效。这个系统过程对结果集缓存的指定高于其它所有结果集缓存的设置。

排序区

排序缓冲区提供数据排序所需要的内存空间。当用户执行 SQL 语句时,常常需要进行排 序,所使用的内存就是排序缓冲区提供的。在每次排序过程中,都首先申请内存,排序结束 后再释放内存。 参数 SORT_BUF_SIZE 指定排序缓冲区的大小,建议使用默认值 20MB。

哈希区

DM8 提供了为哈希连接而设定的缓冲区,不过该缓冲区是个虚拟缓冲区。之所以说是虚 拟缓冲,是因为系统没有真正创建特定属于哈希缓冲区的内存,而是在进行哈希连接时,对 哈希连接的数据量进行了计算。如果计算出的数据量大小超过了哈希缓冲区的大小,则使用 DM8 创新的外存哈希方式;如果没有超过哈希缓冲区的大小,实际上还是使用内存池来进行 哈希操作。 参数 HJ_BUF_SIZE 来进行控制,由于该值的大小可能会 限制哈希连接的效率,所以建议保持默认值,或设置为更大的值。 除了提供 HJ_BUF_SIZE 参数外,DM Server 还提供了创建哈希表个数的初始化参数, 其中,HAGR_HASH_SIZE 表示处理集函数时创建哈希表的个数,建议保持默认值 100000。

查看参数在配置文件中的值:

SELECT * FROM V$DM_INI WHERE para_name = '<内存参数>';

欢迎访问达梦技术分享社区 ECO

https://eco.dameng.com

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 8:28:38

基于储能电站服务的冷热电多微网系统双层优化配置附Matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。 &#x1f34e; 往期回顾关注个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知,完整Matlab代码获取及仿…

作者头像 李华
网站建设 2026/4/18 8:27:13

学长亲荐9个AI论文工具,继续教育学生轻松搞定毕业论文!

学长亲荐9个AI论文工具&#xff0c;继续教育学生轻松搞定毕业论文&#xff01; AI 工具让论文写作不再难 在继续教育的道路上&#xff0c;毕业论文常常成为许多学生最头疼的环节。无论是选题、资料收集还是撰写、降重&#xff0c;每一个步骤都可能让人感到力不从心。而随着 AI …

作者头像 李华
网站建设 2026/4/17 21:55:44

从0到1做智能知识库:AI应用架构师的项目规划模板(可直接用)

从0到1做智能知识库:AI应用架构师的项目规划模板(可直接复用) 元数据框架 标题:从0到1构建智能知识库:AI应用架构师的全流程项目规划模板(附工具集与落地指南) 关键词:智能知识库、知识图谱、检索增强生成(RAG)、AI架构设计、知识工程、项目规划、落地实践 摘要:本…

作者头像 李华
网站建设 2026/4/17 20:25:28

降本增效新常态:2025年企业如何借力专业IT人才外包公司?

在数字化转型加速的今天&#xff0c;企业对于敏捷、高效、专业的IT技术团队需求激增。自建团队面临周期长、成本高、管理复杂等挑战&#xff0c;因此&#xff0c;选择一家可靠的IT人才外包公司已成为众多科技企业优化人力资源配置、保障项目交付的关键策略。面对市场上众多的服…

作者头像 李华
网站建设 2026/4/18 11:20:08

2025年技术人才外派公司全攻略:核心误区、能力对比与落地避坑指南

在业务敏捷性与成本控制双重压力下&#xff0c;企业技术团队的构建模式正经历深刻变革。根据人力资源智库Mercer发布的《2024年全球人才趋势报告》&#xff0c;超过60%的中国企业管理者计划增加对柔性人才解决方案的投入&#xff0c;其中技术人才外派公司成为填补关键技能缺口、…

作者头像 李华
网站建设 2026/4/18 11:20:13

Java 异常捕获基础知识:Exception、Error 和 Throwable

1. 基本覆盖范围 try {// 可能抛出各种异常 } catch (Exception e) {// 可以捕获所有继承自Exception的异常// 包括运行时异常和受检异常 }2. 异常继承体系 Throwable (可抛出)├── Error (错误) // catch(Exception) ❌ 不能捕获│ ├── VirtualMach…

作者头像 李华