Oracle 大页配置use_large_pages 参数解析

一、前因

再给一位客户的Exdata 2 节点 RAC 19C版本创建数据库并配置好优化参数后,客户一天发来一份健康检查报告,打开一看 use_large_pages 配置异常。 回想安装部署时特意确认了在db启动大页已经生效,为何会有此异常告警项?

二、检查确认

在DB中检查 配置的是参数是 AUTO_ONLY

启动日志也是正常使用上了大页内存。

三、参数解析

在 19c 之前的早期版本中,有三个可能的值 -- TRUEFALSEONLY。从 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 pages

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
use_large_pages                      string      TRUE
SQL> show parameter sga

NAME                                 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 -g
              total        used        free      shared  buff/cache   available
Mem:             15           1           1           9          13           4
Swap:             7           0           7

SQL> 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:00
 Per process system memlock (soft) limit = UNLIMITED
2025-07-16T04:13:07.478104-04:00
 Expected per process system memlock (soft) limit to lock
 instance MAX SHARED GLOBAL AREA (SGA) into memory: 9540M
2025-07-16T04:13:07.478300-04:00
 Available system pagesizes:
  4K, 2048K
2025-07-16T04:13:07.478424-04:00
 Supported system pagesize(s):
2025-07-16T04:13:07.478486-04:00
  PAGESIZE  AVAILABLE_PAGES  EXPECTED_PAGES  ALLOCATED_PAGES  ERROR(s)
2025-07-16T04:13:07.478680-04:00
     2048K             4770            4770             4770        NONE
2025-07-16T04:13:07.478739-04:00
 Reason for not supporting certain system pagesizes:
2025-07-16T04:13:07.478836-04:00
  4K - 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]$

四、总结

|-------------|-------------------------------|----------------|-----------------------------------------------------------------------|----------------------------------------------------------------------|
| 参数值 | 核心功能描述 | 启动情况 | 性能相关说明 | 适用场景及特殊限制 |
| TRUE | 系统配置大页时可使用;优先分配大页,不足时用常规页 | 无论大页是否充足,均可启动 | 11.2.0.2 版本中若大页不足可能导致 ORA-04030 错误和性能下降;11.2.0.3 及之后版本支持混合页分配,性能更稳定 | 无特殊场景限制,是除特定云服务和本地 Exadata 外的默认值 |
| FALSE | 不使用大页,仅用常规页 | 可正常启动 | 可能导致严重性能下降(任何平台均可能受影响) | 不推荐使用,仅 Oracle ASM 实例因 MEMORY_TARGET 启用自动设为 FALSE 时无性能问题 |
| AUTO | 启动时计算并请求所需大页数;大页不足时混合使用大页和常规页 | 无论大页是否充足,均可启动 | 性能稳定性中等,依赖系统大页配置情况 | 适用于希望尝试使用大页但允许 fallback 到常规页的场景 |
| ONLY | 要求整个 SGA 必须使用大页;大页不足时无法启动 | 大页充足则启动,否则启动失败 | 性能一致性好,推荐用于需要稳定性能的场景 | 云环境 Exadata 和 Base Database Service 的默认值;不可与 MEMORY_TARGET 等参数同时设置 |
| AUTO_ONLY | 启动时计算并请求所需大页数;仅在大页充足时启动,不足则失败 | 大页充足则启动,否则启动失败 | 性能稳定性好,确保 SGA 完全使用大页 | 19c 及之后版本的本地 Exadata 系统默认值 |

相关推荐
惜分飞1 天前
ORA-600 kcratr_nab_less_than_odr和ORA-600 4193故障处理--惜分飞
数据库·oracle
fen_fen2 天前
Oracle建表语句示例
数据库·oracle
此刻你2 天前
常用的 SQL 语句
数据库·sql·oracle
海心焱2 天前
从零开始构建 AI 插件生态:深挖 MCP 如何打破 LLM 与本地数据的连接壁垒
jvm·人工智能·oracle
德彪稳坐倒骑驴2 天前
MySQL Oracle面试题
数据库·mysql·oracle
吕司2 天前
MySQL库的操作
数据库·mysql·oracle
dishugj2 天前
【Oracle】 rac的一些问题以及解决方案
数据库·oracle
eWidget2 天前
面向信创环境的Oracle兼容型数据库解决方案
数据库·oracle·kingbase·数据库平替用金仓·金仓数据库
熊文豪2 天前
关系数据库替换用金仓——Oracle兼容性深度解析
数据库·oracle·金仓数据库·电科金仓·kes
eWidget2 天前
面向Oracle生态的国产高兼容数据库解决方案
数据库·oracle·kingbase·数据库平替用金仓·金仓数据库