SGA中的第三个组成部分是共享池。共享池是对sql,pl/sql 程序进行语法分析、编译、执行的内存区域。共享池包括库缓冲区(library cache)、数据字典缓冲区(Data Directory Cache)用户全局区(User Global Area)。其中库缓冲区含有Sql 语句的分析码、执行计划;数据字典缓冲区含有从数据字典中得到的表、列定义、权限。用户全局区包含用户的MTS 会话信息。
共享池主要用于对SQL 、pl/sql 程序语句进行语法分析、编译、执行、所以,如果应用中药运行大量存储过程或包,则要增加共享池的尺寸。共享池的大小由参数SHARE_POOL_SIZE 确定。要了解共享池大小,可以用以下方法:
方法一:
1.………
2.Shared_Pool_size = 52428800
3.…..
方法二:
1.SQL> select name,value from v$parameter where name like …%size?;
方法三:
1.SQL> show parameter share_pool_size
共享池应计算存储过程、包等的成功率。
可以查询数据字典 v$rowcache 了解数据字典的成功与失败次数。
1.SQL> select sum(gets) “dictionary gets”,
2.Sum(getmisses) “dictionary cache getmisses”
3.From v$rowcache ;
其中gets 表示读取某一类数据字典的成功次数,getsmisses 表示读取某一类数据字典的失败次数。此外还可以通过查询结果计算共享池中读取数据字典的成功率
1.SQL> select parameter, get, getmisses, getmisses/(getmisses+gets)*100 “miss ratio”,
2.(1- (sum(getmisses)/(sum(getmisses)+sum(gets)) ) ) *100 “hit ratio”
3.From v$rowcache
4.Where gets+getmisses<>0
5.Group by parameter,gets,getmisses;
查询数据字典 v$librarycache 可以计算共享池中库缓存的失败率,结果应该小于1%。
1.SQL>select sum(pins) “ total pins”, sum(reloads) “ total reloads”, sum(reloads)/sum(pins)*100 libarycache from v$librarycache;
其中 total pins 表示驻留内存的次数, total reloads 表示重新加载到内存的次数,librarycache 表示失败率。
上面分析了系统全局区的三个组成部分-----数据缓冲区、日志缓冲区及共享池,如果要得到SGA的总大小,可以在SQL*Plus中使用show sga 命令。
SQL>show sga或查询数据字典
SQL> select * from v$sga;