话说大张江有处仙乡,唤做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砖家之间,只差了几个常用命令!




