讲师中心 微信公众号
AI工具推荐 视频效率加速

Oracle RAC节点内存使用不均如何处理

浅萱大大_8282

浅萱大大_8282

发布时间:2026-07-22 06:53:19

|

495人浏览过

|

来源于php中文网

原创

要分层定位内存占用者,先查Oracle实例SGA/PGA实际用量,再查OS层非Oracle进程和共享内存段残留,避免盲目调参。

oracle rac节点内存使用不均如何处理

查清楚到底是谁在吃内存:别只看 top,要分层定位

单看 top 或 free -h 说“节点1内存98%、节点2才70%”,没用——你得拆开看 Oracle 进程、系统缓存、其他用户进程各自占多少。RAC 节点内存不均,80% 以上是某类进程或配置偏差导致,不是随机现象。

  • 先确认 Oracle 实例实际使用的 SGA+PGA:show parameter sga_target 和 show parameter pga_aggregate_target 查配置;再跑 SELECT SUM(pga_used_mem)/1024/1024/1024 FROM gv$process 算各节点 PGA 实际用量(注意是 gv$process,不是 v$process)
  • SGA 实际分配看 SELECT inst_id, component, current_size/1024/1024 AS mb FROM gv$memory_dynamic_components,重点比对 DEFAULT buffer cache、shared_pool、large_pool 是否某节点明显偏大
  • 查非 Oracle 进程:在 OS 层用 ps aux --sort=-%mem | head -20,特别留意 Python、Java、备份脚本等常驻进程——案例里两个 alert_monitor.py 就吃掉 120G 内存
  • 检查共享内存段是否残留:ipcs -m 看是否有未释放的 hugepage 段,尤其当之前重启过实例但没 clean shutdown 时

SGA 分配失衡:db_cache_size 不是全局开关,别乱调

db_cache_size 是实例级参数,每个节点独立生效。有人看到节点1慢,就只给它加大 db_cache_size,结果节点1 SGA 暴涨、挤压 shared_pool,反而引发 ORA-4031 和大量硬解析,CPU 升高、GC 等待飙升——这不是均衡,是制造瓶颈。

  • 查真实缓存使用:SELECT inst_id, component, current_size FROM gv$memory_dynamic_components WHERE component = 'DEFAULT buffer cache',对比各节点值是否偏离超过 2 倍
  • 如果某节点 current_size 远高于配置值,说明 AMM(memory_target)在动态调整,此时手动设 db_cache_size 会被忽略,得先关 AMM 或调 memory_max_target
  • 盲目加缓存前,先看 gc cr blocks received 和 gc current blocks received:若前者远高于后者,说明该节点读热点集中但本地缓存命中差,加 db_cache_size 可能缓解;若后者远高,说明写争用严重,加缓存只会加剧块传输压力
  • RAC 中 buffer cache hit ratio 失效:一个节点显示 95%,但其中 40% 的 “命中” 是从其他节点拉 CR 块来的,不算真高效。更应关注 physical reads direct 占比——太高说明全表扫描绕缓存,调 db_cache_size 没用

跨节点诊断必须逐实例执行:gv$ 视图不是魔法,inst_id 别漏

所有带 g 前缀的视图(gv$sysstat、gv$session、gv$process)都需显式过滤 inst_id 或按 inst_id 分组,否则数据混在一起,会把节点1狂发、节点2狂收的 GC 流量互相抵消,误判“整体平稳”。

QuantOracle
QuantOracle

63个确定性量化金融计算器 + 10个通过MCP的复合工作流。期权定价、Greeks、奇异衍生品、风险指标、投资组合优化……

下载
  • 查内存相关统计必须加 inst_id:SELECT inst_id, name, value FROM gv$sysstat WHERE name IN ('session pga memory', 'session pga memory max')
  • 查会话级内存占用:SELECT inst_id, sid, serial#, program, pga_used_mem/1024/1024 AS mb FROM gv$session ORDER BY pga_used_mem DESC,一眼看出哪个节点哪个会话在吃内存
  • 查 buffer cache 命中率不能只算全局:SELECT inst_id, (SUM(decode(name,'db block gets',value,0)) + SUM(decode(name,'consistent gets',value,0)) - SUM(decode(name,'physical reads',value,0))) / NULLIF(SUM(decode(name,'db block gets',value,0)) + SUM(decode(name,'consistent gets',value,0)),0) FROM gv$sysstat GROUP BY inst_id
  • 漏 inst_id 的典型错误:SELECT SUM(pga_used_mem) FROM gv$process —— 这个 sum 把所有节点 PGA 加一起,完全掩盖了不均问题

ADRCI 和 AWR 不能替代实时观察:滞后性会骗人

AWR 快照间隔默认 60 分钟,ADRCI 的 alert 日志也是滚动写入。当你发现节点1内存突然飙到 95%,翻 AWR 报告可能只看到“过去一小时平均 70%”,根本抓不到峰值时刻的真相。

  • 紧急排查时,立刻连到高内存节点运行:SELECT * FROM v$memory_target_advice(看 AMM 建议)、SELECT * FROM v$sgastat ORDER BY bytes DESC(看 shared_pool 内部碎片)
  • 用 adrci 查当前节点最近 10 分钟告警:adrci> show home → adrci> set homepath diag/rdbms/<db_name>/<inst_name></inst_name></db_name> → adrci> show alert -tail 100,重点搜 ORA-4030(PGA 耗尽)、ORA-4031(shared_pool 不足)
  • OSWatcher 数据比 AWR 更及时:检查 oswmem 输出,看 PageIn/PageOut 是否突增、Free 是否跌破 5%——这是内存真正吃紧的铁证,不是“使用率高”这种模糊指标
  • 别信“自动均衡”:Oracle 不会把 PGA 从节点1挪到节点2。内存不均要么是应用连接分布不均(全连 VIP 而非 SCAN),要么是 SQL 绑定不均(某些 SQL 总在节点1执行),要么是外部进程失控——得靠人工定位,不是等 Oracle 自愈

真实场景里,最常被忽略的是:内存不均往往不是 Oracle 自己的问题,而是某个监控脚本、ETL 工具或备份进程在某个节点上失控运行。查 ps 和 ipcs 比调参数快十倍。

热门AI工具

更多
VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

AionClaw
AionClaw Hot

AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

Lovart
Lovart Hot

一款面向视觉设计创作的AI设计平台,可通过智能体和画布工作流辅助制作海报、Logo、网页、PPT及其他视觉内容。

相关专题

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

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

921

2023.08.16

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

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

2573

2023.09.15

oracle怎么分页
oracle怎么分页

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

2610

2023.09.18

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

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

1489

2023.09.19

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

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

2113

2023.09.19

oracle imp
oracle imp

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

2769

2023.09.19

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

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

4329

2023.11.02

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

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

237

2023.11.08

FrankenPHP集成Laravel详细教程
FrankenPHP集成Laravel详细教程

本专题提供FrankenPHP集成Laravel的详细配置指南,全面解析运行原理、开发环境搭建、Caddyfile配置、Octane工作模式、数据库连接、队列任务、定时任务和生产环境优化,解决部署过程中常见的报错与兼容性问题。

0

2026.10.08

热门下载

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

精品课程

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn