信息化 频道

SAP与Oracle的不同CRM之路


4.2 shared pool的设置优化
    设置shared pool的大小来说,没有一个通用的、普遍适用的值,不同的系统负载需要不同大小的shared pool来管理。通常我们在设置shared pool时,应该遵循“不要太大、也不要太小”的原则,设置一个初始的值,然后让系统正常运行一段时间,在这段时间里,对shared pool的使用情况进行观察监控,最后根据系统的负载得出一个在当前负载下比较合理的值。注意,这里只是说明是在当前负载下,如果随着系统的不断升级,导致负载发生一个比较质的变化,这时又需要对shared pool重新监控并做成调整了。

    设置1G以上的shared pool不会给性能带来任何的提高,相反,这将给oracle管理shared pool以及监控shared pool的过程中会带来更多的麻烦。我们可以在系统上线时,设置shared pool为SGA的10%,但是不要超过1G,让系统正常运行一段时间,然后我们可以借助9i以后所引入的advisory来帮助我们判断shared pool设置是否合理。

    只要将初始化参数:statistics_level设置为typical(缺省值)或all,就能启动对shared pool的建议功能,如果设置为basic,则关闭建议功能。使用如下的SQL语句显示oracle所建议的shared pool的大小。
SQL> SELECT shared_pool_size_for_estimate, estd_lc_size, estd_lc_memory_objects, 2 estd_lc_time_saved, estd_lc_time_saved_factor, 3 estd_lc_memory_object_hits 4 FROM v$shared_pool_advice; SHARED_POOL_ ESTD_LC ESTD_LC_MEMORY ESTD_LC_TIME ESTD_LC_TIME ESTD_LC_MEMORY SIZE_FOR_ESTIMATE _SIZE _OBJECTS _SAVED _SAVED_FACTOR _OBJECT_HITS ----------------- ------- --------------- ------------ ------------- ------------ 128 135 12223 8566 0.9993 2980874 160 166 15809 8567 0.9994 2981291 192 197 19167 8570 0.9998 2982322 224 228 22719 8572 1 2982859 256 259 27594 8572 1 2982906 288 292 31436 8572 1 2982917 320 323 36157 8572 1 2982920 352 354 40371 8572 1 2982929 384 385 45019 8572 1 2982937 416 389 46099 8572 1 2982937 448 389 46099 8572 1 2982937 480 389 46099 8572 1 2982937 512 389 46099 8572 1 2982937
 

    第一列表示oracle所估计的shared pool的尺寸值,其他列表示在该估计的shared pool大小下所表现出来的指标值,具体含义可以参见oracle的联机帮助。我们主要关注estd_lc_time_saved_factor列的值,当该列值为1时,表示再增加shared pool对性能的提高没有意义。对于上例来说,当shared pool为224M时,达到非常好的大小。对于设置比224M更大的shared pool来说,就是浪费空间,没有意义了。

    我们还可以借助v$shared_pool_advice来观察不同的shared pool尺寸情况下的响应时间(单位是秒)各是多少: 
SQL> SELECT 'Shared Pool' component, 2 shared_pool_size_for_estimate estd_sp_size, 3 estd_lc_time_saved_factor parse_time_factor, 4 CASE 5 WHEN current_parse_time_elapsed_s + adjustment_s < 0 THEN 6 0 7 ELSE 8 current_parse_time_elapsed_s + adjustment_s 9 END response_time 10 FROM (SELECT shared_pool_size_for_estimate, 11 shared_pool_size_factor, 12 estd_lc_time_saved_factor, 13 a.estd_lc_time_saved, 14 e.VALUE / 100 current_parse_time_elapsed_s, 15 c.estd_lc_time_saved - a.estd_lc_time_saved adjustment_s 16 FROM v$shared_pool_advice a, 17 (SELECT * FROM v$sysstat WHERE NAME = 'parse time elapsed') e, 18 (SELECT estd_lc_time_saved 19 FROM v$shared_pool_advice 20 WHERE shared_pool_size_factor = 1) c); COMPONENT ESTD_SP_SIZE PARSE_TIME_FACTOR RESPONSE_TIME ----------- ------------ ----------------- ------------- Shared Pool 128 0.9993 252.82 Shared Pool 160 0.9994 251.82 Shared Pool 192 0.9998 248.82 Shared Pool 224 1 246.82 Shared Pool 256 1 246.82 Shared Pool 288 1 246.82 Shared Pool 320 1 246.82 Shared Pool 352 1 246.82 Shared Pool 384 1 246.82 Shared Pool 416 1 246.82 Shared Pool 448 1 246.82 Shared Pool 480 1 246.82 Shared Pool 512 1 246.82


   

    如果是9i之前的版本,没有advisory的话,则可以在系统运行过程中,观察shared pool的统计信息以及等待事件来判断shared pool是否合理。

    如果设置了Shared Server连接模式,则注意要通过配置large pool(通过设置large_pool参数)。如果不设置large pool,session的PGA会有一部分在shared pool里进行分配,从而加重shared pool的负担。
0
相关文章