我一直在尝试从 oracle AMM 切换到 ASMM 大页面。我在 RHEL 6 上做了以下更改
在 /etc/sysctl.conf 中添加了以下条目(按照 Hugepages_setting.sh 的建议)
vm.nr_hugepages=777
在 /etc/security/limits.conf 中添加了以下条目
oracle soft memlock 2831155
oracle hard memlock 2831155
重新启动服务器,将oracle参数memory_target、memory_max_target、sga_target、sga_max_target、use_large_pages更改为特定值。
数据库重新启动后,我可以看到以下内容:
[root@rheloracle ~]# grep -i huge /proc/meminfo
AnonHugePages: 0 kB
HugePages_Total: 777
HugePages_Free: 8
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
当我关闭数据库时,我可以看到 HugePages_Free 等于 HugePages_Total。
[root@rheloracle ~]# grep -i huge /proc/meminfo
AnonHugePages: 0 kB
HugePages_Total: 777
HugePages_Free: 777
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
看起来数据库级别和操作系统级别的 HugePage 配置是同步的并且正在使用。但所有示例和文档(我已引用)都表明,启用大页面后,HugePages_Rsvd 应该具有非零值。但同样的情况并没有发生在我的身上。如果我遗漏了什么或者 HugePages_Rsvd 0 是正常的,您能建议一下吗?
(我在 RHEL6 上运行 oracle 18c xpress 版本)
答案1
PRE_PAGE_SGA
仅当 Oracle参数设置为FALSE
(我认为是 Oracle 11 之前的默认值)时,您才应该看到“保留大页面”的值。
从 Oracle 12 开始,默认情况下您应该看到以下内容:
SQL> show parameter PRE_PAGE_SGA
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
pre_page_sga boolean TRUE
$ grep HugePages_Rsvd /proc/meminfo
HugePages_Rsvd: 0