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

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

-- 共享池中保留池的调整(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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏小白安全

重置dedecms管理员后台密码重现及分析

0×00 概述 2018年1月,网上爆出dedecms v5.7 sp2的前台任意用户密码重置和前台任意用户登录漏洞,加上一个管理员前台可修改其后台密码...

1.4K5
来自专栏黑泽君的专栏

day73_淘淘商城项目_06_solr索引库搭建 + solr搜索功能实现 + 图片显示等问题解决_匠心笔记

  solr是java开发的。   solr的安装文件。   推荐在Linux环境下使用Solr,需要安装环境Linux。   需要安装jdk。参考链接:htt...

4043
来自专栏L宝宝聊IT

MFS分布式文件系统

2625
来自专栏weixuqin 的专栏

MySQL 学习笔记(二):数据库更新、视图和数据控制

3205
来自专栏weixuqin 的专栏

MySQL 学习笔记(二):数据库更新、视图和数据控制

1383
来自专栏java沉淀

MySQL · 特性分析 ·MySQL 5.7新特性系列三无标题文章

1794
来自专栏散尽浮华

Mysql优化系列(1)--Innodb引擎下mysql自身配置优化

1.简单介绍 InnoDB给MySQL提供了具有提交,回滚和崩溃恢复能力的事务安全(ACID兼容)存储引擎。InnoDB锁定在行级并且也在SELECT语句提供一...

4895
来自专栏Albert陈凯

2018-11-23 当我们输入一条 SQL 查询语句时,发生了什么?

我们经常说,看一个事儿千万不要直接陷入细节里,你应该先鸟瞰其全貌,这样能够帮助你从高维度理解问题。同样,对于 MySQL 的学习也是这样。平时我们使用数据库,看...

1645
来自专栏程序员的SOD蜜

Oracle 免费的数据库--Database 快捷版 11g 安装使用与"SOD框架"对Oracle的CodeFirst支持

一、Oracle XE 数据库与连接工具安装使用 Oracle数据库历来以价格昂贵出名,当然贵有贵的道理,成为一个Oracle DBA也是令人羡慕的事情,如果程...

4577
来自专栏皮振伟的专栏

[linux][x86]LOCK指令的影响

前言: 一般多线程并行操作,对个别的变量需要使用原子操作,经常用到__sync_fetch_and_add类似的函数,来避免CPU操作各自的cache没有同步内...

2214

扫码关注云+社区

领取腾讯云代金券