暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

GA了,还管它SGA, PGA!那是个啥?

SIT部落 2018-04-11
872

话说大张江有处仙乡,唤做SIT部落。仙女老爷们的日常便是把机房的各色设备连来倒去,探究万物的兼容调和之法。小仙惫懒, Oracle系列都这开头......

仙女老爷们的日常


 SGA?PGA? GA就好!

或许 上仙随手丢弃的

正是 本篇孜孜以求的


言归正传。Oracle服务器通常由Instance和DB组成。门神Instance内存坐,吃货DB磁盘耍。用户通过Instance访问DB。多个Instance可以曲径通幽一个DB, 但多个DB不可以共事一个Instance。出张官方大图镇楼:

Oracle DB & Instance


闲嗑1. PGA

Instance主要负责内存和后台进程处理。启动Instance即分配内存,启动后台进程的过程。官方大图也许乱花迷眼,手绘小图浅草送香:

程序全局区PGA(Program Global Area)保存每个与Oracle DB连接的用户进程所需的信息。每一个用户进程对应一个服务器进程(因此该进程还有个外号叫做用户进程的影子进程),当服务器进程启动时分配PGA。PGA还包含单个服务器进程所需要的数据和控制信息,比如每个session传入的SQL绑定变量,以及对该session的控制信息。


闲嗑2. SGA

系统全局区SGA(System Global Area)保存DB的信息,包括:

  • 共享池 - 对SQL, PL/SQL程序进行语法分析,编译和执行的内存。

  • 数据缓冲区 - 存储从磁盘数据文件中读入的数据,所有用户共享。

  • 日志缓冲区 - 记录数据库所有的修改信息。

  • Large池 - 为大的后台进程(备份恢复,并行查询等)分配的内存。

  • Stream池 - 为Stream应用分配的内存。

  • Jave池 - 为Jave应用分配的内存。

共享池数据缓冲区的内存分配对DB的读写访问性能有直接影响。


闲嗑3. 自动内存管理

内存管好了无功,管错了都是泪。实现PGA,SGA自动分配,那无疑妥妥的甩锅。小仙提交的报告:

  • 9i - 设置workarea_size_policy = auto,实现自动PGA管理;

  • 10g - 设置statistics_level = typical 或者 all,启动ASMM(Auto Shared Memory Management),实现自动SGA管理;

  • 11g - 设置statistics_level = typical 或者all,启动AMM(Automatic Memory Managment), 实现自动内存管理。P.S 同时需设置sga_target = 0; pga_aggregate_target = 0。


下节预告

咱与Oracle砖家之间,只差了几个常用命令

文章转载自SIT部落,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论