本章内容主要是讲解Oracle的PGA,SGA的内存分配问题
整体上和自己以前了解的相一致
当然,程度更加深入
简单记录一些
PGA,程序全局区,可分为固定、可变两部分
而可变PGA区是DBA更关心的
其中包括会话内存(存放session登录相关信息)和私有SQL区(SQL执行状态、游标等信息)
其中,每个用户可打开游标数受到OPEN_CURSORS参数的限制
UGA,用户全局区,主要是用户会话,游标状态等相关数据
CGA,调用全局区,用于分析、执行SQL,获取结果集
两者默认情况包含在PGA中,也可由Oracle自行单独划分内存
V$PGASTST视图可用于查询PGA相关信息
而10g之后的V$PROCESS视图也提供了关于进程消耗PGA的相关字段
SQL工作区分为三种模式(optimal,onepass,multipass)
一般情况,属于optimal的操作越多表示数据库性能越好
可通过V$SYSSTAT视图查询相关,以此作为PGA性能参考
V$PAG_TARGET_ADVICE,V$PGA_TARGET_ADVICE_HISTOGRAM
会给用户提出一些用于调整PGA的参考数值
SGA,系统全局区
可分为固定区,缓冲缓存,共享池,重做日志缓冲等子区(以前了解过)
V$SGASTST视图可查询相关信息(但书上说因为bug等因素,数值不太准……)
SGA的设定,尽量小于操作系统的shmmax,最大共享内存(Windows系统无需特别注意)
V$DB_CACHE_ADVICE,V$SHARED_POOL_ADVICE
为用户提供SGA设置参考数值
当Oracle发展到现在,对于内存管理已经可以完全自动化了
以个人接触最多的10g来说
PGA,SGA都有各自的参数用来指定是否由Oracle自动分配,并可设定内存额度
另外,Oracle也给出不同数据库环境的设定建议
OLTP系统中,Oracle应使用不大于系统总内存80%的内存数
其中PGA使用份额大约是Oracle使用内存总数的20%
而对于DSS系统,总内存数不变,PGA使用量大约为50%
不正确的内存参数设置,将可能导致无法连接Oracle,CPU占有率过高等问题
书中还介绍了很多隐含参数以及细节原理,就不一一记录了
总的说来,本周进度还算可以接受
希望下周可以继续保持这种状态
不过……第六章是个比较难啃的骨头,近100页
大概进度要受到不少影响了 ◎◎