ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 读书笔记-tunning101之share pool(一)

读书笔记-tunning101之share pool(一)

原创 Linux操作系统 作者:lsq_008 时间:2008-05-12 13:29:54 0 删除 编辑

part 1: 与shared pool相关的参数

1.  shared_pool_size :该参数设置了共享池的总大小,单位是字节。

2. shared_pool_reserved_size: 该参数设定为较大对象使用的保留共享池大小。

3.shared_pool_reserved_min_alloc: 该参数设置了大对象的阀值(就是说多大才算大对象)

4.large_pool_size: 该参数设置大池的大小。大池是为了更好的管理共享池空间而设置的。在MTS模式下,PGA里的用户会话数据和游标状态被放置在大池里。

5.large_pool_min_alloc:这个参数自8.0.3版本后,已经不被使用。

6.parallel_automatic_tuning: 设置是否在并行操作时使用大池。8i及以上版本有效。

7.java_pool_size: 为java及其相关组建保留的区域。

8.session_cached_cursors: 该参数设置在会话游标缓存区里可以保留的游标数量,用以减少软解析次数,从而减轻shared pool的负担。该参数影响到会话使用的缓存数。

part2:监控共享池的使用情况

1. 查看共享池大小。

SQL> select pool,sum(bytes)/1024/1024 from v$sgastat
  2  where pool='shared pool' 
  3  group by pool;
 
POOL         SUM(BYTES)/1024/1024
------------ --------------------
shared pool            56.0044746

2.查看共享池剩余空间大小

SQL> select pool,bytes from v$sgastat
  2  where name='free memory';
 
POOL              BYTES
------------ ----------
shared pool     4786772
large pool      3988096
java pool       4194304

如果free memory较低,并不一定代表有问题,相反,如果free memory较大,可能意味着你设置了过大的共享池,令一个可能造成free memory过大的原因是过多的aging正在发生。可以查看视图v$shared_pool_reserved中的Request_Misses列,如果该列的数值在增加,预示着shared pool设置过小。

part3:library cache

1. 查看library cache的命中率

SQL> select namespace,gethitratio,pinhitratio
  2  from v$librarycache;
 
NAMESPACE       GETHITRATIO PINHITRATIO
--------------- ----------- -----------
SQL AREA         .400499828  .903548108
TABLE/PROCEDURE  .873973359  .974220699
BODY             .999493776  .999374833
TRIGGER                   0           0
INDEX                     0           0
CLUSTER          .911764706  .961643836
OBJECT                    1           1
PIPE                      1           1
JAVA SOURCE               1           1
JAVA RESOURCE             1           1
JAVA DATA                 1           1
 
11 rows selected.
 

上述示例的gethitratio只有40%,这是由于执行了大量没有使用绑定变量的sql所致。脚本如下:

I=0
while [ $I -le 10000 ]
do
sqlplus scott/tiger<select * from test where object_id=$I and object_name='asdflakdfjalsdfjalsdfjalsdfjalsdfljkasafdasdf';
exit;
EOF
I=$((I+1))
done

显然,每执行一次sql,不得不进行一次硬解析。

2. 查看硬结析率

SQL> select a.value total,b.value hard,a.value-b.value soft,
  2  round((b.value/a.value)*100,1) hardparseperc
  3  from v$sysstat a,v$sysstat b
  4  where a.statistic#=330
  5  and b.statistic#=331;
 
     TOTAL       HARD       SOFT HARDPARSEPERC
---------- ---------- ---------- -------------
    311225      23124     288101           7.4

3.可以通过查看v$db_object_cache,定位占用共享池较大空间的对象。

SQL>  select name,sharable_mem
  2  from v$db_object_cache
  3   where type in('PACKAGE','PACKAGE BODY','FUNCTION'
  4   ,'PROCEDURE');
 
NAME                           SHARABLE_MEM
------------------------------ ------------
DBMS_ADVISOR                           8544
SYS$RAWTOANY                          12640
STATSPACK                             63610
STATSPACK                             53610
PRVT_HDM                              43608
STANDARD                              24952
PRVT_ADVISOR                          12640
DBMS_STANDARD                         24929
DBMS_ADVISOR                          24984
PRVT_HDM                              16732
PRVT_ADVISOR                          66708
 
NAME                           SHARABLE_MEM
------------------------------ ------------
STANDARD                             438620
 
12 rows selected.

对于占用较大空间的对象,比如上例中的STANDARD,就可以将其keep在

shared_pool_reserved中。

part 4:Data Dictionary Cache

数据字典缓冲区是用来保存数据字典的递归sql,可以通过如下sql查询命中率:

SQL> select to_char(round((1-sum(Getmisses)/sum(gets))*100,1))||'%' "Hit Ratio"
  2  from v$rowcache;
 
Hit Ratio
-----------------------------------------
98.2%
 

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/10972173/viewspace-265143/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
十余年大型金融及电信系统数据库管理经验,曾服务于中国建设银行、中国移动。对oracle,mysql数据库有深入了解。 擅长python开发,独立开发了开源数据库自动化监控运维平台Power Monitor。

注册时间:2008-02-29

  • 博文量
    335
  • 访问量
    1369116