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 ORA-00054 故障处理一例Oracle 字符串转数组的函数相关资讯 Oracle教程
- Oracle中纯数字的varchar2类型和 (07/29/2015 07:20:43)
- Oracle教程:Oracle中查看DBLink密 (07/29/2015 07:16:55)
- [Oracle] SQL*Loader 详细使用教程 (08/11/2013 21:30:36)
| - Oracle教程:Oracle中kill死锁进程 (07/29/2015 07:18:28)
- Oracle教程:ORA-25153 临时表空间 (07/29/2015 07:13:37)
- Oracle教程之管理安全和资源 (04/08/2013 11:39:32)
|
本文评论 查看全部评论 (0)