0
点赞
收藏
分享

微信扫一扫

读书笔记:一文搞懂Oracle内存管理:从入门到精通



本文为个人学习《Expert Oracle Database Architecture Techniques and Solutions for High Performance and Productivity(第四版本》一书过程中的笔记与理解分享,仅用于学习与交流,部分内容参考原书观点并结合>实际经验进行整理。若涉及版权问题,请联系删除或沟通处理。也请大家支持购买原版书籍。

一文搞懂Oracle内存管理:从入门到精通

简单理解Oracle内存结构

想象Oracle数据库就像一个大工厂,它需要合理分配和使用内存空间。这个工厂主要有三大内存区域:

  1. SGA(系统全局区):相当于工厂的公共仓库,所有工人都能从这里取东西
  2. PGA(进程全局区):每个工人自己的工具箱,只有自己能用
  3. 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自动管理

两种常用方法:

  1. 单独设置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;

  1. 使用全自动模式(不适合超大内存):

-- 设置总内存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变量占用的空间不受限制

最佳实践建议

  1. 能用自动就用自动:特别是PGA自动管理
  2. 定期检查调整:查看V$PGA_TARGET_ADVICE等视图
  3. 别设得太死:PGA上限可以设置但要留余地
  4. 共享模式要注意:需要更大的SGA空间
  5. 小心大数组变量:它们会占用PGA且不受控制

总结

Oracle内存管理就像管理工厂的空间分配,需要在公共和私人空间之间找到平衡。自动管理让工作更轻松,但特殊情况下还是需要人工干预。理解PGA和UGA的工作原理,合理配置参数,才能让数据库高效稳定运行。下一节我们会详细讲解SGA这个"公共仓库"的管理技巧。

------------------作者介绍-----------------------
姓名:黄廷忠
现就职:Oracle中国高级服务团队
曾就职:OceanBase、云和恩墨、东方龙马等

举报

相关推荐

0 条评论