目录
内存结构
内存池
首先启动数据库服务时会向操作系统申请一大片内存池。将池子分为共享内存池和运行时内存池。
共享内存池:一大片内存组成,当DM数据库需要申请小片内存时就会从这里申请。使用完再还回。
运行时内存池:数据库服务的一些功能模块需要使用的。
缓冲区(简介)
- 数据缓冲区:将数据页加载到内存时,存放的地方,包括要刷盘的脏页等都放在此
- 日志缓冲区:redo log使用
- 字典缓冲区:数据字典使用,加载一部分数据字典的内容存到内存,存放到这里
- sql缓冲区:执行sql时需要使用的内存,包括生成的执行计划,都存放在这里。
- 排序区:执行sql排序时使用
- 哈希区:哈希连接时使用
通过视图查询
1.share pool
该参数是整个共享内存的大小;通过参数memory_pool控制
select name,VALUE,DESCRIPTION from v$parameter where name='MEMORY_POOL';
select PARA_NAME,PARA_VALUE,DESCRIPTION ,PARA_TYPE from v$dm_ini where PARA_NAME like '%MEMORY_%';
select PARA_TYPE,count(1) from v$dm_ini group by PARA_TYPE;
从以上结果可以看出DM内存管理也有类似内存自动管理(memory_target)
参数属性分为三种:动态,静态和手动
静态:可以被动态修改,修改后重启服务器才可生效
动态:可以被动态修改,修改后即时生效。动态参数又分为会话级和系统级两种。会话级参数被修改后,新的参数值只h会影响新创建的会话,之前的会话不会受影响。系统级参数的修改会影响所有会话。
手动:不能被动态修改,必须手动修改dm.ini参数文件,然后胡重启才能生效。
2.Buffer缓冲区
在DM数据库,buffer缓冲分为4种,分别为:
2.1.normal缓冲区
对应ini参数是buffer
2.2.keep缓冲区
常驻的数据都放在keep数据页中,对应的ini参数就是keep
2.3.recycle缓冲区
高并发系统、使用with as较多,临时数据较多,需要将这个recycle数据页所占用的内存值调大,对应ini的参数是recycle
所有的页大小在初始化实例时都已经设定好了,现在使用ini参数修改的是缓冲区内存大小。
2.4.fast缓冲区
fast包含数据页和回滚页,常驻缓冲区,这两者都是由系统自动管理,无需用户干涉。对应的ini参数是fast_pool_pages和fast_roll_pages ,代表fast缓冲区的大小为多少个数据页。
select name,PAGE_SIZE,sum(N_TOTAL_PAGES),sum(FREE) from v$bufferpool group by name,page_size;
3.sql缓冲区
通过cache_pool_size参数来进行大小定义
可以缓存执行过的sql,sql执行计划等。极大避免硬解析,同时还能缓存ssql执行的结果集。
select * from v$dm_ini where para_NAME = 'CACHE_POOL_SIZE';
4.字典缓存
select PARA_NAME,PARA_VALUE,DESCRIPTION from v$dm_ini where PARA_NAME='DICT_BUF_SIZE';
DM数据库中通过dict_buf_size参数来进行控制。数据库对像比如表,索引,视图,序列,同义词,触发器,存储过程的信息都缓存在数据字典缓冲区中。
通过v$dict_cache内存视图l来查看该内存结构的使用情况
select * from v$dict_cache;
5.日志缓冲区(log buffer)
v$rlogfile视图
通过rlog_size 来定义日志缓冲区的内存大小。
v$rlog视图
用来查询日志的总体信息。包括当前日志的检查点LSN,文件LSN等
达梦数据库的REDO日志文件是有最小大小限制的,最小大小为:4096 * 页大小,当前数据库的页大小可以通过如下语句查看:
select para_name,para_value from v$dm_ini where para_name = 'GLOBAL_PAGE_SIZE';
达梦云适配技术社区
https://eco.dameng.com/