当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以上内存的服务器上进行测试,不知道会不会有不同的结论。

相关推荐
XDHCOM1 天前
ORA-32484重复列名错误,ORACLE数据库CYCLE子句故障修复与远程处理方案
数据库·oracle
翻斗包菜1 天前
PostgreSQL 日常维护完全指南:从基础操作到高级运维
运维·数据库·postgresql
呆瑜nuage1 天前
MySQL表约束详解:8大核心约束实战指南
数据库·mysql
一博一言1 天前
Oracle高版本Version_Count问题处理排查
oracle·dba
liliangcsdn1 天前
Agent Memory智能体记忆系统的示例分析
数据库·人工智能·全文检索
那个失眠的夜1 天前
Mybatis延迟加载策略
xml·java·数据库·maven·mybatis
Rick19931 天前
SQL 执行流程
数据库·sql
M--Y1 天前
Redis常用数据类型
数据结构·数据库·redis
猿小喵1 天前
MySQL慢查询分析与处理-第二篇
数据库·mysql·性能优化
Y001112361 天前
MySQL-进阶
开发语言·数据库·sql·mysql