我们的文章会在微信公众号IT民工的龙马人生和博客网站( www.htz.pw )同步更新 ,欢迎关注收藏,也欢迎大家转载,但是请在文章开始地方标注文章出处,谢谢!
由于博客中有大量代码,通过页面浏览效果更佳。
本文为个人学习《Expert Oracle Database Architecture Techniques and Solutions for High Performance and Productivity(第四版本》一书过程中的笔记与理解分享,仅用于学习与交流,部分内容参考原书观点并结合>实际经验进行整理。若涉及版权问题,请联系删除或沟通处理。也请大家支持购买原版书籍。
一文搞懂Oracle内存管理:从入门到精通
简单理解Oracle内存结构
想象Oracle数据库就像一个大工厂,它需要合理分配和使用内存空间。这个工厂主要有三大内存区域:
- SGA(系统全局区):相当于工厂的公共仓库,所有工人都能从这里取东西
- PGA(进程全局区):每个工人自己的工具箱,只有自己能用
- UGA(用户全局区):记录每个工人工作进度的记事本,根据工作方式不同放在不同地方
五种内存管理方式对比
Oracle提供了五种内存管理方法,就像工厂的五种管理模式:
管理模式 | 主要设置参数 | 适用情况 | 特点 |
---|---|---|---|
全自动模式(AMM) | MEMORY_TARGET | 想省心管理 | 最简单但不支持大内存 |
半自动模式(ASMM) | SGA_TARGET | 只想自动管仓库 | 只自动管理SGA |
手动模式 | DB_CACHE_SIZE等 | 精细控制党 | 每个参数都要自己设 |
PGA自动管理 | PGA_AGGREGATE_TARGET | 推荐使用 | 自动管理工人工具箱 |
PGA手动管理 | SORT_AREA_SIZE等 | 老系统兼容 | 不推荐新系统用 |
深入理解PGA和UGA
PGA就像每个工人的私人工具箱:
- 需要时就申请空间
- 只归这个工人自己使用
- 大小可以随时调整
UGA记录工人的工作状态:
- 如果是"共享工人"模式,记事本放在公共仓库
- 如果是"专属工人"模式,记事本就放在自己工具箱里
- 里面存着SQL工作区、排序区等重要信息
如何开启PGA自动管理
两种常用方法:
- 单独设置PGA目标值:
-- 先关闭全自动模式
ALTER SYSTEM SET MEMORY_TARGET=0 SCOPE=SPFILE;
-- 设置PGA目标300MB
ALTER SYSTEM SET PGA_AGGREGATE_TARGET=300M SCOPE=SPFILE;
-- 设置SGA目标1500MB
ALTER SYSTEM SET SGA_TARGET=1500M SCOPE=SPFILE;
-- 重启生效
STARTUP FORCE;
- 使用全自动模式(不适合超大内存):
-- 设置总内存1500MB
ALTER SYSTEM SET MEMORY_TARGET=1500M SCOPE=SPFILE;
-- 让系统自动分配
ALTER SYSTEM SET PGA_AGGREGATE_TARGET=0 SCOPE=SPFILE;
ALTER SYSTEM SET SGA_TARGET=0 SCOPE=SPFILE;
重要发现:PGA分配的秘密
通过实际测试我们发现:
- PGA目标值只是个参考,不是硬性限制
- 工人越多,每个人分到的工具箱空间越小
- 单独工作时能分到15MB,50人时就只有7MB,200人时稳定在5MB左右
- 实际使用量可能远超设定(测试中设300MB实际用了560MB)
- PL/SQL变量占用的空间不受限制
最佳实践建议
- 能用自动就用自动:特别是PGA自动管理
- 定期检查调整:查看V$PGA_TARGET_ADVICE等视图
- 别设得太死:PGA上限可以设置但要留余地
- 共享模式要注意:需要更大的SGA空间
- 小心大数组变量:它们会占用PGA且不受控制
总结
Oracle内存管理就像管理工厂的空间分配,需要在公共和私人空间之间找到平衡。自动管理让工作更轻松,但特殊情况下还是需要人工干预。理解PGA和UGA的工作原理,合理配置参数,才能让数据库高效稳定运行。下一节我们会详细讲解SGA这个"公共仓库"的管理技巧。
------------------作者介绍-----------------------
姓名:黄廷忠
现就职:Oracle中国高级服务团队
曾就职:OceanBase、云和恩墨、东方龙马等
电话、微信、QQ:18081072613
个人博客: (http://www.htz.pw)
优快云地址: (https://blog.youkuaiyun.com/wwwhtzpw)
博客园地址: (https://www.cnblogs.com/www-htz-pw)