Oracle数据库的pagetable的使用
不启用大页时
SGA大小: 9504M
PGA大小: 3159M
cat proc/meminfo |grep PageT
关闭Oracle时的情况
PageTables: 2416 kB
开启Oracle时的情况
PageTables: 72748 kB
登录一个远程用户
PageTables: 81280 kB
查询一个小表
PageTables: 83856 kB
查询一个6GB大小的表
PageTables: 99720 kB
按照上一个文章里面算的
一个GB 会需要 2MB的页表
那么可以看到 登录一个远程用户后
增长了大约10MB的页表, 这一块可能还没有涉及堆区
然后查询一个大表, 堆区增长了大约 18MB
与 9GB的堆区 可以对应起来.
开启大页
修改数据库的环境变量
比如我这个机器 10GB的堆区
可以选择的大小为
5120 就足够了.
然后还要修改 共享段大小
需要说明 共享段大小应该可以大约内存, 这个应该是不限制的
另外要确认 memory_target的参数为 0 避免私用AMM
vim /etc/sysctl.conf
kernel.shmmax = 139586437120
kernel.shmall = 34078720
kernel.shmmni = 4096
vm.nr_hugepages = 5120
增加memlock的设置
注意单位是KB 需要大约SGA区域设置
vim /etc/security/limits.conf
oracle soft memlock 136314880
oracle hard memlock 136314880
机器重启后
重启之前的内存:
total used free shared
Mem: 30 1 0 9
buffer cache 29g, avaiable 19g
重启后
total used free
Mem: 30 10 20
关于页表:
数据库服务启动前
PageTables: 2540 kB
启动后
PageTables: 42420 kB
登录一个远程用户
PageTables: 41140 kB
查询一个小表
PageTables: 41144 kB
查询一个6GB大小的表
PageTables: 42072 kB
确认在这样的场景下, 一个大表的查询可以节约 50MB的页表使用。
100个并发就可以节约 5GB的内存。
如果堆区是 30G的话 就是 15GB的内存。
所以启用大页 还是非常有必要的。
文章转载自济南小老虎,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




