读书笔记:Oracle数据库内存结构:系统全局区(SGA)详解

我们的文章会在微信公众号IT民工的龙马人生博客网站( www.htz.pw )同步更新 ,欢迎关注收藏,也欢迎大家转载,但是请在文章开始地方标注文章出处,谢谢!
由于博客中有大量代码,通过页面浏览效果更佳。

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

Oracle数据库内存结构:系统全局区(SGA)详解

什么是SGA?

系统全局区(SGA)是Oracle数据库实例的核心内存结构,每个Oracle进程都会在某个时刻访问它。SGA的大小可以从几十MB(小型测试系统)到几GB(中型系统),甚至数百GB(超大型系统)。

如何查看SGA?

在Linux/Unix系统上,SGA是一个物理实体,可以通过命令查看:

$ ipcs -m | grep ora

在Windows上,Oracle作为单一进程运行,SGA是其私有内存的一部分,无法直接查看。

在Oracle内部,可以通过V$SGASTAT视图查看SGA详细信息:

SQL> select pool, name, bytes from v$sgastat order by pool, name;

SGA的主要组件

SGA由多个内存池组成:

  1. 共享池(Shared pool):存储共享游标、存储过程等
  2. 数据库缓冲区缓存(Database buffer cache):缓存从磁盘读取的数据块
  3. 固定SGA(Fixed SGA):包含实例和数据库状态信息
  4. 重做日志缓冲区(Redo log buffer):临时存储数据库更改信息
  5. Java池(Java pool):为数据库中的JVM分配内存
  6. 大池(Large pool):用于共享服务器连接等
  7. 流池(Streams pool):用于数据共享工具

关键内存管理参数

影响SGA大小的主要参数包括:

  • JAVA_POOL_SIZE:控制Java池大小
  • SHARED_POOL_SIZE:控制共享池大小
  • DB_*_CACHE_SIZE:控制各种缓冲区缓存大小
  • SGA_TARGET:用于自动SGA内存管理
  • MEMORY_TARGET:自动管理PGA和SGA

内存分配单位:颗粒(Granule)

SGA内存分配以"颗粒"为单位进行,颗粒大小取决于SGA总大小:

  • SGA<1GB时:颗粒通常为4MB
  • SGA>1GB时:颗粒可能为16MB

可以通过查询查看当前颗粒大小:

SQL> select component, granule_size from v$sga_dynamic_components;

重做日志缓冲区

重做日志缓冲区是临时存储重做数据的内存区域,由LOG_BUFFER参数控制。Oracle建议:

  • 至少8MB
  • 使用闪回功能且SGA>4GB时,至少64MB
  • 使用Data Guard异步传输时,至少256MB

数据库块缓冲区缓存

这是SGA中最重要的组件之一,用于缓存数据块。包含三个主要区域:

  1. 默认池(Default pool):主要缓存区域
  2. 保留池(Keep pool):用于频繁访问的段
  3. 回收池(Recycle pool):用于大型随机访问段

Oracle使用触摸计数算法管理缓存块,频繁访问的块会保留在缓存中。

多种块大小支持

Oracle支持在同一数据库中使用不同块大小,但需要为每种非默认块大小配置专用缓存:

SQL> alter system set db_16k_cache_size = 16m;

多种块大小主要用于可传输表空间功能,也可用于特定性能调优场景。

总结

SGA是Oracle数据库性能的关键因素,合理配置各个内存组件对数据库性能至关重要。现代Oracle版本提供了自动内存管理功能,简化了SGA配置,但理解其内部工作原理对于性能调优和故障排除仍然非常重要。

------------------作者介绍-----------------------
姓名:黄廷忠
现就职:Oracle中国高级服务团队
曾就职:OceanBase、云和恩墨、东方龙马等
电话、微信、QQ:18081072613
个人博客: (http://www.htz.pw)
CSDN地址: (https://blog.csdn.net/wwwhtzpw)
博客园地址: (https://www.cnblogs.com/www-htz-pw)

posted @ 2025-07-27 11:17  认真就输  阅读(43)  评论(0)    收藏  举报