前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >共享池中保留池的调整(shared_pool_reserved_size)

共享池中保留池的调整(shared_pool_reserved_size)

作者头像
Leshami
发布2018-08-07 11:06:01
5320
发布2018-08-07 11:06:01
举报
文章被收录于专栏:乐沙弥的世界

--*************************************************

-- 共享池中保留池的调整(shared_pool_reserved_size)

--*************************************************

1.何谓保留池

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

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

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

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

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

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

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2011年06月23日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档