达梦8——内存参数分析
一、内存简介
达梦数据库的内存使用简单可以分为如下三部分:
select * from v$mem_pool;
select * from v$dm_ini where para_NAME = 'MEMORY_POOL';
达梦数据库系统使用的内存分为3部分。
分别是缓冲区内存、主内存、其他内存。
二、达梦内存详解
1、缓冲区
缓冲区内存分为
(1)数据缓冲区
- normal缓冲区,对应的ini参数是buffer,
- keep缓冲区,常驻的数据都放在keep数据页中,对应的ini参数就是keep,
- recycle缓冲区,高并发系统、使用with as语句较多,临时数据较多需要将这个recycle数据页所占用的内存值调大,对应的ini参数是recycle。记住所有的页大小在初始化实例时已经设定好了,现在使用ini参数修改的是缓冲区内存大小。
- fast缓冲区,fast包含数据页和回滚页, 常驻缓冲区,这两者都是由系统自动管理,无需用户干涉对应的ini参数是fast_pool_pages和fast_roll_pages,代表fast缓冲区的大小为多少个数据页。,
select * from v$dm_ini where para_NAME = 'BUFFER'; select * from v$dm_ini where para_NAME = 'KEEP'; select * from v$dm_ini where para_NAME = 'RECYCLE';
select * from v$dm_ini where para_NAME = 'FAST_POOL_PAGES';
select * from v$dm_ini where para_NAME = 'FAST_ROLL_PAGES';
有个视图v$bufferpool代表了数据缓冲区所有的pool,咱看这个视图的查询结果:
通过v$bufferpool视图和这个sql,可以大致算出数据缓冲区的总大小
select sum(n_pages * page_size) from v$bufferpool;
(2)日志缓冲区
redo_log日志在写入磁盘前,先写入在日志缓冲区中,最后在机会合适时再写入日志缓冲区。对应的ini参数是RLOG_BUF_SIZE
select * from V$DM_INI WHERE PARA_NAME = 'RLOG_BUF_SIZE'; 单位是页数量
SELECT * FROM v$rlog;
(3)sql缓冲区
- 所需执行的sql执行计划,sql,结果集都会在缓存在sql缓冲区中。
- v$cacheitem,记录了当前sql缓冲区的使用情况。此外,v$cachepln、v$cachers、v$cachesql分别记录了执行计划缓存、结果集缓存、SQL语句缓存(注:这些视图都是在参数USE_PLN_POOL !=0才统计,其中结果集缓存还受rs_can_cache、rs_cache_tables、rs_cache_min_time参数控制)。
- 对于SQL类别多、包比较多的系统可适当调大该参数。
- 常用 Select sum(item_size) from v$cacheitem 来计算SCP的大小。(存疑,这个结算结果和cache——pool——size的值不一样)
select * from v$dm_ini where para_NAME = 'CACHE_POOL_SIZE'; 单位是M
SELECT * FROM V$CACHEPLN;
(4)数据字典缓冲区
数据库对像比如表,索引,视图,序列,同义词,触发器,存储过程的信息都缓存在数据字典缓冲区中。
在数据库对象较多时,可适当增大该参数。通过查询select total_size,used_size FROM v$dict_cache
select * from V$DM_INI WHERE PARA_NAME = 'DICT_BUF_SIZE';
若想知道字典缓冲区中缓存对象的详细信息需查询视图v$dict_cache_item
SELECT * FROM V$DICT_CACHE_ITEM ;