当SGA大于hugepage的时候,Oracle数据库是怎么使用hugepage的

当SGA大于hugepage的时候,Oracle数据库是怎么使用hugepage的

一直以来,我错误的认为:当SGA大于hugepage的时候,SGA将完全不会使用hugepage,转而全部使用普通的内存页。

而今天我在12.2上发现一个现象,当我配置的SGA大于hugepage的时候,SGA同时使用了hugepage与普通的内存页。

先上结论:

结论

(11.2.0.3) 及更高版本中,Oracle 会先把 SGA 尽可能多地分配到大页里;大页用完后,再用普通页分配剩余部分。这样可能会产生额外的共享内存段,但 SGA 总大小保持不变。在这种"混合页模式"下,数据库会先把可用的大页全部耗尽,然后才切换到普通页。

分别测试了12.2与11.2.0.4版本的数据库,发现:12.2对于hugepage的利用率更高,11.2.0.4的利用率比较低。这可能就是我的错觉的由来。

1、在12.2上测试

如下图:

SGA配置的是3G,大于hugepage的2G:

hugepage配置不到2G,剩余4*2M,明显是有被使用:

查看官方文档后发现,是由USE_LARGE_PAGES这个参数控制,默认值为true:实例会尝试使用大页;如果在启动时可用的大页不足,则允许大页与普通页混合使用。官网部分翻译内容如下:

在 Oracle Database 11g Release 2 (11.2.0.2) 中,如果系统配置的大页数量不足,Oracle会退而使用普通页来分配整个 SGA。这会导致剩余的大页被闲置,同时操作系统必须为 Oracle 进程创建大量页表,以便把 SGA 映射到物理页。结果可能出现 ORA-04030 错误,并引发严重的性能下降。 在 Oracle Database 11g Release 2

(11.2.0.3) 及更高版本中,Oracle 会先把 SGA 尽可能多地分配到大页里;大页用完后,再用普通页分配剩余部分。这样可能会产生额外的共享内存段,但 SGA 总大小保持不变。在这种"混合页模式"下,数据库会先把可用的大页全部耗尽,然后才切换到普通页。

该新特性是从11.2.0.3开始就有了。

2、在11.2.0.4上测试

参考12.2的同等配置条件下进行测试

alert日志的信息不如12.2清晰

区别在于12.2对于hugepage的利用率更高,11.2.0.4的利用率比较低。这可能就是我的错觉的由来。由于资源所限,没办法在大于100G以上内存的服务器上进行测试,不知道会不会有不同的结论。

相关推荐
2603_965148117 小时前
如何解析JSON数据?API返回的商品信息处理教程
开发语言·数据库·python·自动化·json·api
ltl7 小时前
RocksDB 经典故障排查:L0、compaction 与 write stall
数据库
xfhuangfu8 小时前
Oracle中建立到CDB和PDB的连接
数据库·oracle·rpc
小小龙学IT8 小时前
DuckDB 深度实战:用 C++ 在进程内跑一个「分析型数据库」
数据库·c++
NineData8 小时前
DTCC 2026 预告|NineData CEO& 创始人叶正盛:面向 AI Agent 的数据库 DevOps 与数据复制实践
数据库·人工智能·数据库开发·devops·ninedata·数据库技术·dtcc
J_bean9 小时前
MySQL 事务是否必须手动开启?
数据库·mysql·数据库事务·自动提交·手动提交
J_bean9 小时前
MySQL InnoDB 如何检测死锁、判定死锁、处理死锁
数据库·mysql·死锁·死锁检测·处理死锁·死锁判定
浪子明X10 小时前
从 MongoDB 文档到关系模型:构建可重跑、可对账的数据迁移流水线
数据库·mongodb·oracle
杜子不疼.10 小时前
国产数据库撑起固井软件自主化:金仓 × 中海油服「海恒 Cemsol」落地解析
数据库
隔窗听雨眠10 小时前
GBase 8s并发控制深度解析:封锁机制、隔离级别与死锁处理全攻略
服务器·数据库·oracle