- 一种是数据库已经在运行了,
- 一种数据库还没有运行,可能是数据库实例已经停止了;有可能是安装之前等等。
不管是哪种情况,我们都需要确认最大数据库可用内存是多少。| 就是明确当前这个服务器上,有多少内容,我们可以是给让数据库使用的。
这里有一个计算的例子:
- 比如free 查看操作系统内存,当前free+cache+top里dmserver已用内存,一共为38GB的话,
这里有一个经常可能出现问题的情况:
- 安装数据库的时候,是根据目标服务器上,只运行数据库程序设置的参数,结果后面把应用系统也部署在同一个服务器上了,就会导致问题(内存不够,数据库服务可能会被操作系统kill掉 | 俗称 OOM )
那么在我们知道服务器有多少内存可以给数据库用之后(就是一个数值,比如我们分析了,有38GB可以给数据库使用,记为 MaxMemory),需要如何配置好数据库服务的内存参数呢?
A. 我们首选需要知道下面这几个点:
- 关键参数为五部分:recycle、cach_pool_size、buffer、所谓的vm和sess、其他(hagr sort buffer等)
- 其中“recycle”单位为MB,够用就好。一般设置为1000或者2000即可,内存比较小的虚拟机500也行;具体是否足够,需要根据实例运行后的对应的recycle的缓冲区的命中率和相关信息进行判断的。
- 其中“cache_pool_size”单位为MB,实例运行期间,最大可用到3*cache_pool_size。该参数够用就好,设置的过小会严重影响并发性能,设置的过大也不合适。
- 其中“buffer”,包含 buffer 和 max_buffer两个参数,单位为MB,不要超过 MaxMemory*40%
- 其中“所谓的vm和sess”,单位为KB(其中 max_sessions单位单位为1),说的是这四个参数:‘SESS_POOL_TARGET’,‘MAX_SESSIONS’,‘VM_POOL_TARGET’,‘MEMORY_TARGET’
- 关于前一点,有这么一个要求:(VM_POOL_TARGET+SESS_POOL_TARGET)MAX_SESSIONS 不要超过 MEMORY_TARGET ,且 MEMORY_TARGET 不要超过 MaxMemory40%
- 其他的部分 hagr 、hash join、sort相关的,不调整对系统没有致命影响,这里不做表述。
所以,如果这里如果可以用内存 MaxMemory 是 38GB的话,这个系统经常OOM,我们会做如下参数调整:(这里max_sessions是1000)
BUFFER=15000 # 32000
MAX_BUFFER=15000 # 32000
VM_POOL_TARGET=15000 # 32768
SESS_POOL_TARGET=15000 # 32768
MEMORY_TARGET=15000 # 0
RECYCLE 保持之前的值 2000 未做调整
CACHE_POOL_SIZE 保持之前的值 500 未作调整
最后修改时间:2020-12-12 09:56:00
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。