的要求设置 shared_pool 的值的话,建议在系统上线之时设置为 SGA 的 10%,但是不要超过 1G,然后通过
顾问来判断设置是否合理,当然必须将初始化参数 statistics_level 设置为 typical 或者 all,这样才
能产生顾问。
SQL> SELECT T.SHARED_POOL_SIZE_FOR_ESTIMATE "SP",
2 T.ESTD_LC_SIZE "EL",
3 T.ESTD_LC_MEMORY_OBJECTS "ELM",
4 T.ESTD_LC_TIME_SAVED "ELT",
5 T.ESTD_LC_TIME_SAVED_FACTOR "ELTS %",
6 T.ESTD_LC_MEMORY_OBJECT_HITS "ELMO"
7 FROM V$SHARED_POOL_ADVICE T
8 /
SP EL ELM ELT ELTS % ELMO
---------- ---------- ---------- ---------- ---------- ----------
432 98 4203 739431 0.979 175769954
528 191 7149 744591 0.9858 176184285
624 286 10082 750144 0.9932 176413511
720 381 16457 753856 0.9981 176552951
816 476 17949 754790 0.9993 176657863
912 571 20518 755308 1 176731921
1008 666 27638 755544 1.0003 176765699
1104 761 39851 755725 1.0006 176794037
1200 856 43813 755927 1.0008 176817793
1296 951 47191 756054 1.001 176837933
1392 1046 55562 756240 1.0012 176854191
1488 1141 60339 756317 1.0013 176866602
1584 1236 63715 756401 1.0014 176878638
1680 1330 64144 756455 1.0015 176889564
1776 1425 64660 756503 1.0016 176899694
1872 1520 64746 756561 1.0017 176910238
16 rows selected
ESTD_LC_SIZE:估计库高速缓存的使用数量(以兆字节为单位)
ESTD_LC_MEMORY_OBJECTS: 估算共享池中库缓存的内存对象数
ESTD_LC_TIME_SAVED: 估算将可以节省的解析时间
ESTD_LC_TIME_SAVED_FACTOR: 估算的节省的解析时间与当前节省解析时间的比
ESTD_LC_MEMORY_OBJECT_HITS: 估算可以直接从共享池中命中库缓存的内存对象的命中次数
我们主要关注 estd_lc_time_saved_factor 列的值,当该列的值为 1 时表示再增加 shared pool 的大
小对性能的提高没有意义,对于上面例子来说,当 shared pool 为 912MB 时达到最佳。
如何设置 buffer cache 的大小,在 oracle9i 之后开始通过设置参数 db_cache_advice 来启动顾问,
oracle 会监控各种类型的 buffer cache 的使用,oracle 会根据当前所监控到的物理读得速率,从而估
算在不同大小尺寸下的 buffer cache 产生的可能的物理读的数量,将这些信息放入到
v$db_cache_advice。
SQL> show parameters db_cache_advice;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_cache_advice string ON
当然这个参数设置为 on 之后,CPU 的 usage 会有所增加,因为会存在额外的记录,在文档中提到
When the advisory is enabled,there is a small increase in CPU usage, because
additional bookkeeping is required.
SQL>
评论