当前位置: 首页 > news >正文

【Oracle】内存管理实战指南:ASMM vs AMM 配置全解析

💬 “Oracle内存怎么调?ASMM和AMM有啥区别?”

—— 别再盲目设置 SGA=80% 了!今天我来当你的“Oracle内存管家”,

带你科学分配内存,既不让数据库“饿着”,也不让操作系统“窒息”!

今天我们来聊聊 Oracle 数据库的内存调优

这是一份来自一线运维的实战手册,覆盖 Linux/Windows + Oracle 11g/19c,专治“内存配置焦虑症”。


🎯 痛点引入:内存配置的“三大误区”

你是否遇到:

  • 🌀 误区1:听说“SGA=物理内存80%”,就照搬?
  • 🐢 误区2:调完参数,数据库反而更慢了?
  • 🔁 误区3:服务器卡死,发现是操作系统没内存了?

别急,今天我们用科学方法,避开这些坑。


🧩 核心原理:Oracle内存的“双胞胎兄弟”

Oracle 内存管理有两大模式:

  1. AMM(Automatic Memory Management)全自动,Oracle统一管理SGA+PGA
  2. ASMM(Automatic Shared Memory Management)半自动,SGA自动,PGA手动

💡 类比:

  • AMM 像“全包式管家”:你只给总预算(memory_target),他全权分配吃饭(SGA)和零花(PGA)。
  • ASMM 像“财务顾问”:你定好饭钱(sga_target)和零花钱(pga_aggregate_target),他帮你优化。

🔍 决策指南:AMM 还是 ASMM?

操作系统推荐模式原因
LinuxASMM更稳定,控制精细,避免大页(HugePages)冲突
WindowsAMMOracle官方推荐,集成度高,管理简单

📌 版本兼容性

  • Oracle 11g:AMM/ASMM 均支持
  • Oracle 19c:AMM 在某些平台已弃用强烈推荐 ASMM

🔧 实战配置:从备份到生效

📌 黄金法则:调参前,先备份!

✅ 第一步:备份参数文件(救命稻草!)

Sql深色版本
-- 创建PFILE备份(文本文件,可读)
CREATE PFILE='/backup/initORCL.ora'FROM SPFILE;

💡 为什么备份?

如果参数设错导致数据库无法启动,可以用PFILE启动,再修正。


✅ 第二步:内存计算公式(16GB服务器示例)

假设服务器总内存:16GB (16384MB)

项目计算建议值
操作系统预留至少 2GB2048MB
Oracle可用16384 - 204814336MB
ASMM (Linux)
sga_max_size14336 × 70%10035MB (~9.8G)
pga_aggregate_target14336 × 30%4300MB
AMM (Windows)
memory_max_target14336MB14336MB
memory_target同上14336MB

⚠️ 注意:

  • sga_max_size上限sga_target目标值,通常设相同。
  • pga_aggregate_target 是估算值,实际PGA可能略高。

✅ 第三步:配置 ASMM(Linux 推荐)

1. 清理旧的AMM参数(如果存在)


ALTER SYSTEM RESET memory_max_target SCOPE=SPFILE;
ALTER SYSTEM RESET memory_target SCOPE=SPFILE;

2. 设置 sga_max_size(静态参数 → 需重启)


ALTER SYSTEM SET sga_max_size=10035M SCOPE=SPFILE;
SHUTDOWN IMMEDIATE;
STARTUP;

3. 动态设置 sga_targetpga_aggregate_target


ALTER SYSTEM SET sga_target=10035M SCOPE=BOTH;
ALTER SYSTEM SET pga_aggregate_target=4300MSCOPE=BOTH;

4. 验证配置


SHOW PARAMETER sga;
SHOW PARAMETER pga;
SHOWPARAMETER memory;

预期输出

  • memory_target = 0
  • sga_target ≈ 10035M
  • pga_aggregate_target ≈ 4300M

✅ 第四步:配置 AMM(Windows 推荐)

1. 清理旧的ASMM参数


ALTER SYSTEM RESET sga_max_size SCOPE=SPFILE;
ALTER SYSTEM RESET sga_target SCOPE=SPFILE;
ALTER SYSTEM RESET pga_aggregate_target SCOPE=SPFILE;

2. 设置 memory_max_target(静态参数 → 需重启)


ALTER SYSTEM SET memory_max_target=14336M SCOPE=SPFILE;
SHUTDOWN IMMEDIATE;
STARTUP;

3. 动态设置 memory_target


ALTER SYSTEM SET memory_target=14336M SCOPE=BOTH;

4. 验证配置


SHOW PARAMETER memory;
SHOW PARAMETER sga;
SHOW PARAMETER pga;

预期输出

  • sga_target = 0
  • memory_target = 14336M

🔍 诊断/分析:如何验证内存健康?

1. 检查内存分配现状


-- 查看当前SGA组件大小
SELECT * FROM v$sga;-- 查看PGA使用情况
SELECT * FROM v$pgastat;-- 查看内存参数最终值
SELECT name,value FROM v$parameter WHERE name IN ('memory_target', 'sga_target', 'pga_aggregate_target');

2. 监控PGA使用率(防“内存溢出”)


SELECTname,
value,unit
FROM v$pgastat
WHERE name IN ('total PGA allocated', 'total PGA inuse', 'over allocation count');

📌 关键指标

  • over allocation count > 0 → PGA严重不足,可能触发磁盘排序
  • total PGA inuse / pga_aggregate_target > 90% → 预警

最佳实践:内存调优“三不原则”

  1. 不贪多

    永远为操作系统预留至少 2GB,否则OS会疯狂Swap,拖垮整个系统。

  2. 不盲调

    先用 v$pgastatv$sga 分析现有使用情况,再决定是否调整。

  3. 不混用

    AMM 和 ASMM 参数不能共存!确保非用的模式参数被 RESET


📣 总结:Oracle内存配置“速查表”

项目Linux (ASMM)Windows (AMM)
核心参数sga_target, pga_aggregate_targetmemory_target
最大内存sga_max_sizememory_max_target
静态参数sga_max_sizememory_max_target
动态参数sga_target, pga_aggregate_targetmemory_target
推荐比例SGA:PGA ≈ 7:3memory_target = 可用内存
关键命令RESET memory_*RESET sga_*, pga_*

💡 进阶提示

  • 大页(HugePages):在Linux上为ASMM启用HugePages,可显著降低CPU开销。
  • 19c 注意:AMM 在 Exadata 和部分平台已弃用,新环境一律用 ASMM
http://www.dtcms.com/a/343856.html

相关文章:

  • Rust Web开发指南 第一章
  • 服务发现实例和服务实例是不同的
  • 血管介入医疗AI发展最新方向与编程变革:从外周、神经到冠脉的全面解析
  • RabbitMQ面试精讲 Day 27:常见故障排查与分析
  • yggjs_rlayout使用教程 v0.1.0
  • Linux系统之Ubuntu安装cockpit管理工具
  • Jenkins发布spring项目踩坑——nohup java -jar发布后显示成功,但实际jps查询并未运行
  • React 学习笔记1 组件、State
  • 【Tech Arch】Hadoop YARN 大数据集群的 “资源管家”
  • 企业级知识库+智能客服地大模型对比表
  • 实现自己的AI视频监控系统-第一章-视频拉流与解码4(重点)
  • MATLAB启动路径MATLAB202X/bin更改问题
  • 【Python】-- 机器学习项目 - 基于逻辑回归算法的乳腺癌数据集分类
  • 理解AI 智能体:智能体架构
  • DAY14-新世纪DL(DeepLearning/深度学习)战士:破(优化算法)2
  • k8sday14数据存储(2/2)
  • BigData大数据应用开发学习笔记(03)离线处理--数据仓库Hive
  • 直播预约 | CATIA MODSIM SmartCAE带练营第3期:让每轮设计迭代都快人一步!
  • 【C语言16天强化训练】从基础入门到进阶:Day 6
  • 前端查漏补缺
  • 图表组件SciChart WPF再升级:v8.9带来油气井图、新交互与可视化增强
  • PDF文档安全升级:三招实现文本转曲线(防篡改+高清输出)
  • WPF控件随窗体大宽度高度改变而改变
  • Spring Boot 集成 Swagger UI 详细教程
  • 【学习】CSMM认证与CMMI认证的对比分析
  • logback-spring.xml 文件
  • jenkins实现分布式构建并自动发布到远程服务器上 jenkins实现自动打包编译发布远程服务器
  • 逆向代码笔记
  • 51单片机-驱动步进电机模块教程
  • 移动应用青少年模式开发成本解析:原生、Flutter与Uniapp方案对比-优雅草卓伊凡