Oracle 10g 给出了一系列的自动优化的建议,告诉我们PGA分配多大能给系统带来最大的性能?V$PGA_TARGET_ADVICE视图给出了很好的“预测”!

看一下这个视图能给我们带来什么样的信息:

SQL> SELECT pga_target_for_estimate / 1024 / 1024 "PGA(MB)",pga_target_factor,estd_pga_cache_hit_percentage,estd_overalloc_count FROM v$pga_target_advice;

   PGA(MB) PGA_TARGET_FACTOR ESTD_PGA_CACHE_HIT_PERCENTAGE ESTD_OVERALLOC_COUNT

---------- ----------------- ----------------------------- --------------------

        10              .125                           100                    1

        20               .25                           100                    1

        40                .5                           100                    1

        60               .75                           100                    0

        80                 1                           100                    0

        96               1.2                           100                    0

       112               1.4                           100                    0

       128               1.6                           100                    0

       144               1.8                           100                    0

       160                 2                           100                    0

       240                 3                           100                    0

   PGA(MB) PGA_TARGET_FACTOR ESTD_PGA_CACHE_HIT_PERCENTAGE ESTD_OVERALLOC_COUNT

---------- ----------------- ----------------------------- --------------------

       320                 4                           100                    0

       480                 6                           100                    0

       640                 8                           100                    0

14 rows selected.

通过上面的数据可以得到如下的结论:

1.第一列表示不同的PGA的具体值

2.第二列PGA_TARGET_FACTOR为“1”表示当前的pga_aggregate_target设置大小(其他数值都是以这个数据为基础的倍数),我这里是80M,

通过pga_aggregate_target参数可以确认一下

SQL> show parameter pga_aggregate_target

NAME                                 TYPE                             VALUE

------------------------------------ -------------------------------- ------------------------------

pga_aggregate_target                 big integer                      80M

3.第三列表示PGA的估算得到的Cache命中率的百分比

目前系统如果PGA为10M的时候,就可以达到100%的命中率

4.第四列如果为“0”表示可以消除PGA的过载

从上面的数据中可以得到,当PGA为60M的时候,可以消除PGA的过载。

5.通过上面的结论,我们可以将PGA的大小设置为60M。

SQL> alter system set pga_aggregate_target=60m;

System altered.

6.调整后,再次查询一下v$pga_target_advice视图得到如下的建议信息,可以看到基本上已经满足现在的系统需求。

SQL> SELECT pga_target_for_estimate / 1024 / 1024 "PGA(MB)",pga_target_factor,estd_pga_cache_hit_percentage,estd_overalloc_count FROM v$pga_target_advice;

   PGA(MB) PGA_TARGET_FACTOR ESTD_PGA_CACHE_HIT_PERCENTAGE ESTD_OVERALLOC_COUNT

---------- ----------------- ----------------------------- --------------------

        18                .5                            94                    2

        27               .75                            94                    2

        60                 1                           100                    0

43.1992188               1.2                           100                    0

50.3994141               1.4                           100                    0

57.5996094               1.6                           100                    0

64.7998047               1.8                           100                    0

        72                 2                           100                    0

       108                 3                           100                    0

       144                 4                           100                    0

       216                 6                           100                    0

       288                 8                           100                    0

12 rows selected.

通过上面的描述,您一定已经会了解了这个v$pga_target_advice视图了。