达梦数据库的内存结构

本文介绍了达梦数据库的内存结构,包括缓冲区(数据缓冲区、日志缓冲区、字典缓冲区、Sql缓冲区)、内存池(共享内存池和其他运行时内存池)以及其他内存区(排序区、Hash区、共享内存)。详细讲解了各部分的功能和管理方式,如数据缓冲区的四种类别,字典缓冲区的字典信息控制,SQL缓冲区的作用,以及重做日志缓冲区、排序区和Hash区的配置。此外,还提到了达梦数据库与Oracle在某些方面的区别,并提供了参数修改和查看的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

DM服务器使用的内存大概分为3个部分

缓冲区:

  • 数据缓冲区
  • 日志缓冲区
  • 字典缓冲区
  • Sql缓冲区

内存池:

  • 共享内存池
  • 其他运行时内存池

其他内存区:

  • 排序区
  • Hash区
  • 共享内存

达梦是单进程多线程的架构

共享内存是 dmserver启动时,从操作系统中申请的一大片内存,可以在需要的时候进行申请或释放

查看内存相关参数

 

SQL> l

1 select para_name,para_value from v$dm_ini where para_name like '%MEMORY%';

2*

SQL> /

行号 PARA_NAME PARA_VALUE

---------- ---------------------- ----------

1 MAX_OS_MEMORY 100

2 MEMORY_POOL 133

3 MEMORY_N_POOLS 1

4 MEMORY_TARGET 0

5 MEMORY_EXTENT_SIZE 1

6 MEMORY_LEAK_CHECK 0

7 MEMORY_MAGIC_CHECK 1

8 MEMORY_BAK_POOL 4

9 HUGE_MEMORY_PERCENTAGE 50

10 MAX_SESSION_MEMORY 0

memory_pool 公共池

memory_n_pool 共享内存池个数

memory_target 共享内存总大小 0:不限制

负责为其他内存池已经达到其目标大小后的扩展提供内存

  • 数据缓冲区

在将数据页写入磁盘之前以及从磁盘上读取数据页之后,数据页所存储的地方。

BUFFER存在三条链来管理被缓冲的数据页

  • “自由链”
  • “LRU”链
  • ”脏“链

数据缓冲区有四种类别

  • NORMAl(默认值,普通页) :对应参数:buffer单位M
  • Keep:很少或是几乎不怎么被淘汰出去的(普通页) 对应参数:keep单位M。
  • Fast:常驻缓冲区,回滚页(用户不能指定)对应参数:fast_pool_pages数据页总数.
  • Recycle:临时表的数据页,正常淘汰。(用户不能指定)对应参数:RECYCLE单位M。

和oracle的区别:

  • Oracle:recycle和keep里面存的表的数据页。
  • DM:RECYCLE和keep存的是表空间的数据页。Dm里面,用户不能指定使用recycle和fast缓冲区。

修改参数的方式:

  • SP_set_para_value(scope,para_name,para_value);

修改整型参数 scope: 1 动态参数 2 静态参数

 

SQL> l

1 SP_set_para_value(2,'KEEP',16);

2*

SQL> /

DMSQL 过程已成功完成

SP_set_para_string_value:修改字符串类型

SP_set_para_double_value: 修改浮点类型

  • Alter system set para_name=para_value
  • 利用控制台工具修改

查看参数类型

 

SQL> select para_name,para_value,para_type from v$dm_ini where para_name like '%BUFFER%';

行号 PARA_NAME PARA_VALUE PARA_TYPE

---------- ------------------- ---------- ---------

1 HUGE_BUFFER 80 IN FILE

2 HUGE_BUFFER_POOLS 4 IN FILE

3 BUFFER 1110 IN FILE

4 BUFFER_POOLS 19 IN FILE

5 BUFFER_MODE 0 IN FILE

6 BUFFER_FAST_RELEASE 1 SYS

7 MAX_BUFFER 1110 IN FILE

DM的参数类型(para_type):

  • Sys/session:动态参数,同时修改内存和配置文件
  • Readonly:在数据库运行时,不能修改
  • Infile:静态参数,修改配置文件,重启实例服务生效。
  • 字典缓冲区

存放数据字典信息,如模式、表、列、触发器等信息。实例会将部分的数据字典信息加载到字典缓冲区中,并采用lru算法进行字典信息的控制

相关视图:

v$dict_cache_item:字典缓冲区中的字典对象的信息

v$dict_cache:字典缓冲区的信息

  • SQL缓冲区

用于存储包信息(package),执行计划,结果集缓冲的一片专用缓存。对于sql类型多,pkg比较多,复杂的系统建议将该参数调大。

  • A语法分析(字典缓冲区,sql缓冲区)
  • B语义分析(字典缓冲区)
  • C权限分析(字典缓冲区)
  • D查找数据块是否存在内存,不在内存(产生物理读),在内存(数据缓冲区,sql缓冲区)。
  • E是否有可用的执行计划,如果有,按执行计划来,如果没有,就生成执行计划,运行sql,将结果集返回客户端。(字典缓冲区,sql缓冲区,排序区,hash区)。

清空某个sql执行计划:

  • SP_clear_plan_cache:清空执行缓存信息。

定义: SP_clear_plan_cache(plan_id bigint)

Plan_id指定计划ID,其值可以从动态视图v$cacheplan中的cache_item列获得。

  • SP_set_pln_rs_cache:强制设置指定计划结果集缓存的生效及失效。

定义: SP_set_pln_rs_cache(plan_id bigint,to_cache int)

Plan_id指定计划ID,其值可以从动态视图v$cacheplan中的cache_item列获得。

To_cache:指定缓存与否 0:不缓存,1:缓存。定义:

  • 重做日志缓冲区

用于存重做日志的内存缓冲区,为了避免直接对磁盘IO进行随机写,将数据转换为顺序写,提高数据写性能。

RLOG_BUF_SIZE: 重做日志缓冲区大小,单位:page 大小设置为2的幂。

RLOG_POOL_SIZE: 最大日志缓冲区的大小,单位:M.

  • 排序区

排序区是提供数据排序所需要的内存空间,如果内存无法完成,把部分的排序转到磁盘上,对外排序。

Sort_buf_size

  • hash区

服务器中有hash相关的操作,需要用到hash缓冲区。

HJ_BUF_GLOBAL_SIZE:全局hashjoin最大的内存空间。

HJ_BUF_SIZE:单次hashjoin操作最大内存空间

HAGR_BUF_SIZE:单位hash分组操作最大的内存空间

  • 其他运行时的内存池

Vm pool

Sess pool

rt_heap

注意:

  1. 字典缓冲区,数据缓冲区,日志缓冲区,sql缓冲区都不是共享内存池的一部分,都是相互独立的。
  2. 数据缓冲区不会拓展
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值