shared_pool_reserved_size(shared pool 保留池)

https://blog.csdn.net/leshami/article/details/6562894

1.何谓保留池

        简言之,保留一部分内存空间以备不时之需。通常情况下,Oracle会将大的内存请求分割成小的内存块来满足需求。而对于大的内

    存且为连续的内存空间请求,如果在共享池中未找到,则会动用共享池中的保留池。当然,共享池在内存压力的情况下,也会使用到

    保留池中的部分。保留池部分满足较大的内存需求更高效。缺省情况下,Oracle会配置较小的保留池,这部分可以用作PL/SQL或触发器

    编译使用或用于装载JAVA对象的临时空间。这些分配出去的内存一旦释放后将返回给保留池。

        任意大于"_shared_pool_reserved_min_alloc = 4400" 字节的连续内存分配请求,如果shared_pool中分配不能解决,且当前

    shared_pool中没有可用的块能够aged out,则保留池将被使用。

       

2.大值对象在共享池中分配空间的顺序

扫描二维码关注公众号,回复: 8227620 查看本文章

    a.从共享池中非保留池寻找可用空间

    b.如果共享池中非保留池没有所需的可用空间,则从保留池进行分配

    c.如果共享池非保留池与保留池都没有所需的空间,则一些对象需要按LRU原则aged out,然后再按a,b步骤来进行分配。

    共享池的中的保留池大小不能超过共享池的50%,一般情况下建议为共享池的5%到10%。

   

        SQL> select * from v$version;

       

        BANNER

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

        Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bi

        PL/SQL Release 10.2.0.4.0 - Production

        CORE    10.2.0.4.0      Production

        TNS for Solaris: Version 10.2.0.4.0 - Production

        NLSRTL Version 10.2.0.4.0 - Production

           

        SQL> show parameter reserved

       

        NAME                                 TYPE                             VALUE

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

        _shared_pool_reserved_pct            integer                          10

        shared_pool_reserved_size            big integer                      512M  --修改该参数来设置保留池的大小

3.保留池的视图

    v$shared_pool_reserved

    SELECT * from v$shared_pool_reserved;

    SQL> desc v$shared_pool_reserved;

     Name                                      Null?    Type

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

     --以下字段只有当参数SHARED_POOL_RESERVED_SIZE设置了才有效

     FREE_SPACE                   NUMBER  -->保留区的空闲空间数

     AVG_FREE_SIZE                NUMBER  -->保留区的空闲空间平均数

     FREE_COUNT                   NUMBER  -->保留区的空闲内存块数

     MAX_FREE_SIZE                NUMBER  -->最大的保留区空闲空间数

     USED_SPACE                   NUMBER  -->保留区使用空间数

     AVG_USED_SIZE                NUMBER  -->保留区使用空间平均数。

     USED_COUNT                   NUMBER  -->保留区使用内存块数

     MAX_USED_SIZE                NUMBER  -->最大保留区使用空间数

     REQUESTS                     NUMBER  -->请求在保留区查找空闲内存块的次数

     REQUEST_MISSES               NUMBER  -->无法满足查找保留区空闲内存块请求,需要从LRU列表中清出对象的次数

     LAST_MISS_SIZE               NUMBER  -->请求的内存大小,这次请求是最后一次需要从LRU列表清出对象来满足的请求

     MAX_MISS_SIZE                NUMBER  -->所有需要从LRU列表清出对象来满足的请求中的内存最大大小

    

     --以下字段无论参数SHARED_POOL_RESERVED_SIZE是否设置了都有效

     REQUEST_FAILURES             NUMBER  -->没有内存能满足的请求次数(导致4031错误的请求)

     LAST_FAILURE_SIZE            NUMBER  -->没有内存能满足的请求所需的内存大小(导致4031错误的请求)

     ABORTED_REQUEST_THRESHOLD    NUMBER  -->不清出对象的情况下,导致4031错误的最小请求大小

     ABORTED_REQUESTS             NUMBER  -->不清出对象的情况下,导致4031错误的请求次数

     LAST_ABORTED_SIZE            NUMBER  -->不清出对象的情况下,最后一次导致4031错误的请求大小

     --我们可以根据后面4个字段值来决定如何设置保留区的大小以避免4031错误的发生

   

        SQL> select requests,request_misses,request_failures,last_failure_size,aborted_request_threshold ab_re_th,

          2  aborted_requests,last_aborted_size lst_ab_sz

          3  from v$shared_pool_reserved;

       

          REQUESTS REQUEST_MISSES REQUEST_FAILURES LAST_FAILURE_SIZE   AB_RE_TH ABORTED_REQUESTS  LST_AB_SZ

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

                 1              0              542              4112 2147483647                0          0

    

4.保留池调整策略

    a.根据视图v$shared_pool_reserved 来查看保留池是否够用

        SQL> select free_space,free_count,used_space,avg_used_size from v$shared_pool_reserved;

   

        FREE_SPACE FREE_COUNT USED_SPACE AVG_USED_SIZE

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

         505926544        347   14618016    5826.23196

        

    b.使用包dbms_shared_pool 的过程aborted_request_threshold 来调整阙值

    c.修改参数shared_pool_reserved_size

   

        alter system set shared_pool_reserved_size=integer [K | M | G]

            如果shared_pool_reserved_size参数值设置的太小,则视图v$shared_pool_reserved中request_failures的值将大于零并且

        会持续增加,即导致请求内存失败的次数会增加,解决的办法是增加保留池的大小,相应的增大共享池的大小。

            当共享池shared_pool_size太小时,视图v$shared_pool_reserved同样也可以表明参数shared_pool_size值设置的过小。即

        视图v$shared_pool_reserved中request_failures次数大于零或持续增加。

       

            如果设定了保留池,shared_pool_size不能够增加的情况下,则可以减少shared_pool_reserved_size的大小。

            如果未设定保留池,而request_failures次数大于零或持续增加,则增加共享池的大小。

    d.保留池过大

        下列两种情况存在,保留池可能过大

            request_misses列值始终为零,且没有持续增加

            free_memory列值大于等于保留池的50%

    e.下面的表用于判断如何调整保留池的空间

    IF Request_failures    Conjuction  Condition                                      Action

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

     >0 and increasing        AND      Request_misses>0                               Increase shared_pool_reserved_size

     >0 and increasing        AND      Free_memory>=50% of shared_pool_reserved_size  Increase shared_pool_size

     =0                       OR       Free_memory>=50% of shared_pool_reserved_size  Decrease shared_pool_reserved_size

5.影响保留池的几个重要参数

    col ksppinm format a54

    col ksppstvl format a54

    SELECT KSPPINM, KSPPSTVL

    FROM X$KSPPI PI, X$KSPPCV CV

    WHERE CV.INDX = PI.INDX

    AND PI.KSPPINM LIKE '/_%' ESCAPE '/'                                              -- '--

    AND PI.KSPPINM LIKE '%&Para%';                            

   

   

    KSPPINM                                                KSPPSTVL

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

    _shared_pool_reserved_pct                              10

    _shared_pool_reserved_min_alloc                        4400

   

    SQL> show parameter reserved

   

    NAME                                 TYPE                             VALUE

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

    _shared_pool_reserved_pct            integer                          10

    shared_pool_reserved_size            big integer                      512M       

   
————————————————
版权声明:本文为CSDN博主「Leshami」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/leshami/article/details/6562894

猜你喜欢

转载自www.cnblogs.com/nathon-wang/p/12058188.html