为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:v8
【操作系统】:麒麟
【CPU】:x86
【问题描述】*:如题,为什么我的buffer设置才25GB,但是它的内存使用率达到了45GB。
达梦不只有BUFFER一个内存参数
'MEMORY_TARGET',
'BUFFER',
'RECYCLE',
'HJ_BUF_GLOBAL_SIZE',
'HAGR_BUF_GLOBAL_SIZE',
'CACHE_POOL_SIZE',
'DICT_BUF_SIZE',
'SORT_BUF_GLOBAL_SIZE',
'RLOG_POOL_SIZE',
'MAX_SESSIONS',
'VM_POOL_TARGET',
'SESS_POOL_TARGET'
这些都属于内存参数
buf是预申请内存,当数据库中有大批量的会话在操作时,sql申请的内存会预先申请buf内存,内存不够时在申请memory_target的内存,buf+memory_target的内存使用还是不够的话,还是继续往上申请,buf+memory_target并不是限制了内存,而是当内存降下来的时候,无论使用还是未使用只会降到buf的内存,后续在使用时避免在申请内存耗时。
如果想要限制内存的话,可以通过两种方式,一个是限制用户级的内存大小,另一个是限制会话级的大小,如下:
alter user "TEST" limit MEM_SPACE 102400; --限制用户使用100G的内存上限
sp_set_para_value(1,'MAX_SESSION_MEMORY',1024);--限制单个会话上限为1G,超过1G就报错内存不足