Oracle 大页配置use_large_pages 参数解析
一、前因
再给一位客户的Exdata 2 节点 RAC 19C版本创建数据库并配置好优化参数后,客户一天发来一份健康检查报告,打开一看 use_large_pages
配置异常。 回想安装部署时特意确认了在db启动大页已经生效,为何会有此异常告警项?
二、检查确认
在DB中检查 配置的是参数是 AUTO_ONLY
启动日志也是正常使用上了大页内存。
三、参数解析
在 19c 之前的早期版本中,有三个可能的值 – TRUE
、FALSE
、ONLY
。从 Oracle 11.2.0.3 开始,TRUE
意味着实例将分配系统中可用的尽可能多的大页面,并从普通的小页面获取其余部分。FALSE
将告诉它根本不使用大页面,而 ONLY
只有在系统中有足够数量的可用大页面来容纳所有 SGA 时才能启动实例。TRUE
是所有数据库的默认值。
在 19c 版本中,多了一个值 AUTO_ONLY
,现在它是运行 Oracle Database 19c 的 Exadata 系统的默认值。
Database Reference
文档的描述看起起来与 ONLY
值的描述比较像。以下是文档的摘录:
指定在启动期间,实例将计算并请求它所需的大页面数量。如果作系统可以满足此请求,则实例将成功启动。如果作系统无法满足此请求,则实例将无法启动。
实践出真知 测一下不同参数它是如何产生作用的,测试环境没有配置大页面。
[root@localhost ~]# cat /proc/meminfo |grep H
HardwareCorrupted: 0 kB
AnonHugePages: 0 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB[root@localhost ~]# cat /etc/sysctl.conf
# For more information, see sysctl.conf(5) and sysctl.d(5).
fs.aio-max-nr = 3145728
fs.file-max = 6815744
kernel.shmall = 4066380
kernel.shmmax = 16655892479
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
vm.swappiness = 10
当前数据库版本19.19、内存15G、SGA 9.5G
use_large_pages
参数设置为AUTO_ONLY
并重新启动实例。
SQL> show parameter pagesNAME TYPE VALUE
------------------------------------ ----------- ------------------------------
use_large_pages string TRUE
SQL> show parameter sgaNAME TYPE VALUE
------------------------------------ ----------- ------------------------------
allow_group_access_to_sga boolean FALSE
lock_sga boolean FALSE
pre_page_sga boolean TRUE
sga_max_size big integer 9536M
sga_min_size big integer 0
sga_target big integer 9536M
unified_audit_sga_queue_size integer 1048576
SQL> !free -gtotal used free shared buff/cache available
Mem: 15 1 1 9 13 4
Swap: 7 0 7SQL> alter system set use_large_pages=auto_only scope=spfile;System altered.SQL>startup force
数据库重启后可以看到,大页面在系统上被自动配置以适应 SGA。
[oracle@localhost ~]$ cat /proc/meminfo | grep Huge
AnonHugePages: 0 kB
HugePages_Total: 4770
HugePages_Free: 11
HugePages_Rsvd: 11
HugePages_Surp: 0
Hugepagesize: 2048 kB[oracle@localhost trace]$ cat /etc/sysctl.conf
fs.aio-max-nr = 3145728
fs.file-max = 6815744
kernel.shmall = 4066380
kernel.shmmax = 16655892479
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
vm.swappiness = 10
数据库实例能够更改内核配置并自行分配 大页内存空间,这个数字正是适合 SGA 所需的数字。
在alter日志中,也看到实例获取到了SGA所需大小的大页内存。
2025-07-16T04:13:07.478027-04:00Per process system memlock (soft) limit = UNLIMITED
2025-07-16T04:13:07.478104-04:00Expected per process system memlock (soft) limit to lockinstance MAX SHARED GLOBAL AREA (SGA) into memory: 9540M
2025-07-16T04:13:07.478300-04:00Available system pagesizes:4K, 2048K
2025-07-16T04:13:07.478424-04:00Supported system pagesize(s):
2025-07-16T04:13:07.478486-04:00PAGESIZE AVAILABLE_PAGES EXPECTED_PAGES ALLOCATED_PAGES ERROR(s)
2025-07-16T04:13:07.478680-04:002048K 4770 4770 4770 NONE
2025-07-16T04:13:07.478739-04:00Reason for not supporting certain system pagesizes:
2025-07-16T04:13:07.478836-04:004K - Large pagesizes only
2025-07-16T04:13:07.478900-04:00
如果关闭数据库会发生什么情况?
SQL> shutdown IMMEDIATE
DATABASE closed.
DATABASE dismounted.
ORACLE instance shut down.
SQL>
数据库已关闭,内存中还是分配了 hugepage,直到重启或修改。
[oracle@localhost trace]$ sysctl vm.nr_hugepages
vm.nr_hugepages = 4770
[oracle@localhost trace]$
四、总结
参数值 | 核心功能描述 | 启动情况 | 性能相关说明 | 适用场景及特殊限制 |
| 系统配置大页时可使用;优先分配大页,不足时用常规页 | 无论大页是否充足,均可启动 | 11.2.0.2 版本中若大页不足可能导致 错误和性能下降;11.2.0.3 及之后版本支持混合页分配,性能更稳定 | 无特殊场景限制,是除特定云服务和本地 Exadata 外的默认值 |
| 不使用大页,仅用常规页 | 可正常启动 | 可能导致严重性能下降(任何平台均可能受影响) | 不推荐使用,仅 Oracle ASM 实例因 启用自动设为 时无性能问题 |
| 启动时计算并请求所需大页数;大页不足时混合使用大页和常规页 | 无论大页是否充足,均可启动 | 性能稳定性中等,依赖系统大页配置情况 | 适用于希望尝试使用大页但允许 fallback 到常规页的场景 |
| 要求整个 SGA 必须使用大页;大页不足时无法启动 | 大页充足则启动,否则启动失败 | 性能一致性好,推荐用于需要稳定性能的场景 | 云环境 Exadata 和 Base Database Service 的默认值;不可与 等参数同时设置 |
| 启动时计算并请求所需大页数;仅在大页充足时启动,不足则失败 | 大页充足则启动,否则启动失败 | 性能稳定性好,确保 SGA 完全使用大页 | 19c 及之后版本的本地 Exadata 系统默认值 |