0

0

如何配置Oracle大页内存HugePages_提升Linux下的数据库性能

P粉602998670

P粉602998670

发布时间:2026-03-10 20:51:24

|

234人浏览过

|

来源于php中文网

原创

ORA-27102报错主因常是HugePages未正确配置,而非内存不足;需检查/proc/meminfo中HugePages_Total是否足够、sysctl -p是否执行、memlock限制是否放开,并用hugepages_settings.sh计算页数,RAC环境须确保各节点参数完全一致。

Oracle启动报ORA-27102: out of memory,但系统内存充足?先查HugePages是否被禁用

很多dba看到这个错误第一反应是加sga,其实更可能是linux内核没分配足够大页。oracle在启用use_large_pages=only时,会拒绝使用普通页,哪怕物理内存还有几十g空闲,也会直接报错退出。

检查方法很简单:

grep Huge /proc/meminfo
HugePages_Total是否为0,或者远小于sga_max_size(单位KB需换算)。常见坑是:管理员改了/etc/sysctl.conf但忘了执行sysctl -p,或重启后没重载配置。

  • vm.nr_hugepages必须在Oracle实例启动前设置好,动态调整只对后续新分配有效,已运行实例不感知
  • 若用systemd管理Oracle服务,要确认LimitMEMLOCK设为infinity,否则oracle用户无法锁定大页
  • 不要把HugePages_Total设得比SGA还小——Oracle会按sga_max_size向上取整到最近的2MB倍数,留1–2页余量更稳妥

计算vm.nr_hugepages值时,为什么不能直接用sga_max_size / 2048

因为Oracle实际占用的大页数取决于几个隐藏因素:共享池、Java池、大池都算在SGA里,但某些组件(比如ASMM自动内存管理下的memory_target)可能额外申请页;更关键的是,Linux大页大小默认2MB,但部分内核支持1GB大页,而Oracle 19c+才真正稳定支持1GB页,老版本硬配会失败。

安全做法是用Oracle官方脚本hugepages_settings.sh($ORACLE_HOME/rdbms/admin/下),它会读取当前实例的sga_max_sizepga_aggregate_target,再加固定开销(约10–20MB)后向上取整。

  • 手动计算时,把sga_max_size单位转成KB,除以2048,再+2(预留页)
  • 如果启用了use_large_pages=auto,Oracle会尝试混合使用大页和普通页,但日志里会出现WARNING: Large page allocation failed,性能不稳定
  • 注意memlock限制:/etc/security/limits.conf中oracle soft memlockhard memlock都要设为unlimited或至少大于SGA大小(单位KB)

启用HugePages后Oracle进程RSS突然飙升,top显示内存占用翻倍?

这不是泄漏,是正常现象。开启大页后,Oracle不再通过mmap()按需分配,而是启动时就锁定全部SGA对应的大页,pstopRSS列会显示完整占用,不像普通页那样“虚高”。但free -h里的Used不会立刻涨——大页内存不计入常规内存统计,而是单独列在HugePages_Free里。

Vozo
Vozo

Vozo是一款强大的AI视频编辑工具,可以帮助用户轻松重写、配音和编辑视频。

下载

验证是否生效:连接数据库后查v$sgainfo,看Granule Size是否变成2097152(即2MB);或者用pmap -x <pid> | grep "large"</pid>确认进程地址空间里有大量2MB块。

  • 别用htop看大页使用——它默认不显示大页映射,容易误判
  • 如果HugePages_Free长期为0,说明其他进程(如PostgreSQL、DPDK应用)也在争抢大页,需协调分配
  • 重启数据库前记得echo 0 > /proc/sys/vm/nr_hugepages清空,否则下次分配可能失败

Oracle 12c RAC环境下配置HugePages,节点间参数必须完全一致吗?

必须。RAC所有节点的vm.nr_hugepages值、use_large_pages参数、甚至内核大页大小(cat /proc/sys/vm/hugetlb_page_size)都要相同。否则实例启动顺序稍有变化,先起来的节点占光大页,后起的节点就会报ORA-27102,集群无法收敛。

更隐蔽的问题是:不同节点OS补丁级别不同,可能导致hugetlb_shm_group行为不一致,某节点允许oinstall组访问大页,另一节点拒绝,结果crsctl start res ora.asm卡住。

  • cluvfy comp mem -n all提前校验各节点大页配置一致性
  • RAC中不要用use_large_pages=only,推荐use_large_pages=TRUE,允许回退到普通页,避免单点配置失误导致全集群瘫痪
  • 修改/etc/sysctl.conf后,在所有节点执行sysctl -p && systemctl restart oracle-rdbms(或对应服务名)
大页配置最麻烦的不是算数,是它藏在内核、OS权限、Oracle参数、集群协同四层底下,改错一层,现象可能完全一样,但根因差着十万八千里。上线前一定在测试环境模拟一次断电重启——很多问题只在reboot后暴露。
数码产品性能查询
数码产品性能查询

该软件包括了市面上所有手机CPU,手机跑分情况,电脑CPU,电脑产品信息等等,方便需要大家查阅数码产品最新情况,了解产品特性,能够进行对比选择最具性价比的商品。

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
oracle清空表数据
oracle清空表数据

当表中的数据不需要时,则应该删除该数据并释放所占用的空间。本专题为大家提供oracle清空表数据的相关文章,帮助大家解决该问题。

271

2023.08.16

Oracle中declare的使用
Oracle中declare的使用

Oracle DECLARE语句是PL/SQL编程语言中用于声明变量、常量、游标或异常的关键字。它的主要作用是在程序中定义这些对象,以便在后续的代码中使用。DECLARE语句的语法简单明了,可以根据需要声明多个对象。通过使用这些声明的对象,可以进行各种操作,如计算、查询数据库、处理异常等 。

220

2023.09.15

oracle怎么分页
oracle怎么分页

实现分页的步骤:1、使用ROWNUM进行分页查询;2、在执行查询之前进行设置分页参数;3、使用"COUNT(*)"函数来获取总行数,并使用"CEIL"函数来向上取整计算总页数;4、在外部查询中使用"WHERE"子句来筛选出特定的行号范围,以实现分页查询。想了解更多oracle怎么分页的文章,可以来阅读本专题先的文章。

245

2023.09.18

Oracle查看表操作历史记录
Oracle查看表操作历史记录

查看操作历史记录的方法:1、使用Oracle内置的审计功能,可以记录数据库中发生的各种操作,包括登录、DDL语句、DML语句等;2、使用Oracle日志文件,其中包含了数据库中发生的各种操作,可以通过查看日志文件来获取操作历史记录;3、使用Oracle的Flashback功能,可以查看数据库在某个时间点的操作历史记录;4、使用第三方工具等。本专题还提供其他查看表操作的文章,大家可以免费阅读。

463

2023.09.19

Oracle中RAC的用法
Oracle中RAC的用法

Oracle中RAC的用法:1、通过在多个服务器上运行数据库实例来提供高可用性;2、允许在需要时增加或减少节点数量;3、通过将工作负载分布到多个节点上来实现负载均衡;4、使用共享存储来实现多个节点之间的数据共享;5、允许多个节点同时处理数据库请求,从而实现并行处理;6、提供了透明故障切换功能;7、使用了一些技术来确保数据的一致性;8、提供了管理工具来简化RAC环境的管理和维护。本专题还提供RAC相关的其他文章,大家可以免费阅读。

450

2023.09.19

oracle imp
oracle imp

imp是Oracle数据库中的一个命令行工具,用于将导出的数据和对象从一个数据库实例导入到另一个数据库实例。imp命令的一般语法为“imp username/password@connect_string file=file_name [options]”。

339

2023.09.19

常用的数据库软件
常用的数据库软件

常用的数据库软件有MySQL、Oracle、SQL Server、PostgreSQL、MongoDB、Redis、Cassandra、Hadoop、Spark和Amazon DynamoDB。更多关于数据库软件的内容详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1005

2023.11.02

oracle通配符有哪些
oracle通配符有哪些

oracle通配符有“%”、“_”、“[]”和“[^]"。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

166

2023.11.08

Go高并发任务调度与Goroutine池化实践
Go高并发任务调度与Goroutine池化实践

本专题围绕 Go 语言在高并发任务处理场景中的实践展开,系统讲解 Goroutine 调度模型、Channel 通信机制以及并发控制策略。内容包括任务队列设计、Goroutine 池化管理、资源限制控制以及并发任务的性能优化方法。通过实际案例演示,帮助开发者构建稳定高效的 Go 并发任务处理系统,提高系统在高负载环境下的处理能力与稳定性。

4

2026.03.10

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号