dba小知识之大页内存

242 阅读2分钟

「这是我参与2022首次更文挑战的第10天,活动详情查看:2022首次更文挑战

在生产环境中,我们经常遇到很多大内存的数据库服务器。在多年的维护经验过程中,发现数据在超过64G时,开启大页内存有助于数据库性能的提高。下面就简单介绍了linux环境下大页内存的启用

(1).确认操作系统支持大内存页

grep -i huge /proc/meminfo
AnonHugePages:         0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB

(2).计算需要的大内存页数量

根据系统情况确定SGA大小,在初始情况下可以设置SGA为物理内存一半大小,假设其为128G,由于Oracle可能会使得SGA略微大于设置的参数值,所以我们一般会设置大内存总量比SGA略大。 (物理内存为256G时) 128G*1024/2=65536,比这个值略大一点,比如为65560。

(3).修改/etc/sysctl.conf文件

vm.nr_hugepages = 65560 然后用sysctl -p命令使参数生效。

(4).检查大内存页数量

grep -i huge /proc/meminfo

在得到的结果中HugePages_Total值应该为65560,否则可能是操作系统内存碎片化严重,没有足够的连续的内存用于大页面内存,此种情况下需要重启服务器。

hugePages_Total为所分配的页面数目和Hugepagesize相乘后得到所分配的内存大小。HugePages_Free为从来没有被使用过的Hugepages数目。即使Oracle sga已经分配了这部分内存,但是如果没有实际写入,那么看到的还是Free的。这是很容易误解的地方。HugePages_Rsvd为已经被分配预留但是还没有使用的page数目。在Oracle刚刚启动时,大部分内存应该都是Reserved并且Free的,随着Oracle SGA的使用,Reserved和Free都会不断的降低。

(5).设置用户的limits

在/etc/security/limits.conf文件中增加用户的lock memory设置

oracle  hard    memlock  157286400
oracle  soft    memlock  157286400
grid    hard    memlock  157286400
grid    soft    memlock  157286400

此处的数字以KB为单位,由于此处只是一个limits设置,所以可以比实际的可用大内存页大很多。但是不能小于实际的可用的大内存页。

注:如果启用了AMM自动内存管理,就不能使用大页内存功能

alter日志在实例重启时可以查看分配的sga是否全部在大页内存区,如果有下列内容‘Total Shared Global Region in Large Pages = 1024 MB (85%)’说明大页内存区还不够大,需要增加大页内存页