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

   

6. 快捷参考

有关性能优化请参考

    Oracle 硬解析与软解析

    共享池的调整与优化(Shared pool Tuning)

    Buffer cache 的调整与优化(一)

    Oracle 表缓存(caching table)的使用

 

有关ORACLE体系结构请参考

    Oracle 表空间与数据文件

    Oracle 密码文件

    Oracle 参数文件

    Oracle 联机重做日志文件(ONLINE LOG FILE)

    Oracle 控制文件(CONTROLFILE)

    Oracle 归档日志

    Oracle 回滚(ROLLBACK)和撤销(UNDO)

    Oracle 数据库实例启动关闭过程

    Oracle 10g SGA 的自动化管理

    Oracle 实例和Oracle数据库(Oracle体系结构)

 

有关闪回特性请参考

    Oracle 闪回特性(FLASHBACK DATABASE)

    Oracle 闪回特性(FLASHBACK DROP & RECYCLEBIN)

    Oracle 闪回特性(Flashback Query、Flashback Table)

    Oracle 闪回特性(Flashback Version、Flashback Transaction)

 

有关基于用户管理的备份和备份恢复的概念请参考

    Oracle 冷备份

    Oracle 热备份

    Oracle 备份恢复概念

    Oracle 实例恢复

    Oracle 基于用户管理恢复的处理(详细描述了介质恢复及其处理)

    SYSTEM 表空间管理及备份恢复

    SYSAUX表空间管理及恢复

 

有关RMAN的备份恢复与管理请参考

    RMAN 概述及其体系结构

    RMAN 配置、监控与管理

    RMAN 备份详解

    RMAN 还原与恢复

    RMAN catalog 的创建和使用

    基于catalog 创建RMAN存储脚本

基于catalog 的RMAN 备份与恢复

使用RMAN迁移文件系统数据库到ASM

    RMAN 备份路径困惑(使用plus archivelog时)

 

有关ORACLE故障请参考

    ORA-32004 的错误处理

    ORA-01658 错误

    CRS-0215 错误处理

    ORA-00119,ORA-00132 错误处理

    又一例SPFILE设置错误导致数据库无法启动

    对参数FAST_START_MTTR_TARGET = 0 的误解及设定

    SPFILE 错误导致数据库无法启动(ORA-01565)

 

有关ASM请参考

    创建ASM实例及ASM数据库

    ASM 磁盘、目录的管理

    使用 ASMCMD 工具管理ASM目录及文件

 

有关SQL/PLSQL请参考

    SQLPlus 常用命令

    替代变量与SQL*Plus环境设置

    使用Uniread实现SQLplus翻页功能

    SQL 基础-->SELECT 查询

    SQL 基础--> NEW_VALUE 的使用

    SQL 基础--> 集合算(UNION 与UNION ALL)

    SQL 基础--> 常用函

    SQL 基础--> 视图(CREATE VIEW)

    SQL 基础--> 建和管理表

    SQL 基础--> 多表查询

    SQL 基础--> 过滤和排序

    SQL 基础--> 查询

    SQL 基础--> 组与

    SQL 基础--> 次化查询(START BY ... CONNECT BY PRIOR)

    SQL 基础--> ROLLUP与CUBE算符实现数汇总

    PL/SQL -->

    PL/SQL --> 理(Exception)

    PL/SQL --> 言基

    PL/SQL --> 流程控制

    PL/SQL --> PL/SQL记录

    PL/SQL --> 包的管理

    PL/SQL --> 式游标(SQL%FOUND)

    PL/SQL --> 包重、初始化

    PL/SQL --> DBMS_DDL包的使用

    PL/SQL --> DML 触发

    PL/SQL --> INSTEAD OF 触发

    PL/SQL --> 储过

    PL/SQL -->

    PL/SQL --> 动态SQL

    PL/SQL --> 动态SQL的常见错误

 

有关ORACLE其它特性

    Oracle 常用目录结构(10g)

    使用OEM,SQL*Plus,iSQL*Plus 管理Oracle实例

    日志记录模式(LOGGING 、FORCE LOGGING 、NOLOGGING)

    表段、索引段上的LOGGING与NOLOGGING

    Oralce OMF 功能详解

    Oracle 用户、对象权限、系统权限 

    Oracle 角色、配置文件

    Oracle 分区表

    Oracle 外部表

    使用外部表管理Oracle 告警日志(ALAERT_$SID.LOG)

    簇表及簇表管理(Index clustered tables)

    数据泵 EXPDP 导出工具的使用

    数据泵 IMPDP 导入工具的使用

    导入导出 Oracle 分区表数据

    SQL*Loader使用方法

    启用用户进程跟踪

    配置非默认端口的动态服务注册

    配置ORACLE 客户端连接到数据库

    system sys,sysoper sysdba 的区别

    ORACLE_SID、DB_NAME、INSTANCE_NAME、DB_DOMIAN、GLOBAL_NAME

    Oracle 补丁全集 (Oracle 9i 10g 11g Path)

    Oracle 10.2.0.1 升级到 10.2.0.4

    Oracle 彻底 kill session

 

 

时间: 2024-09-07 12:53:29

共享池中保留池的调整(shared_pool_reserved_size)的相关文章

如何将oracle 对象pin在共享池中

dbms_shared_pool.keep 可以将对象pin入shared_pool,而不进入LRU 机制被keep的对象可以是数据库对象,也可以是sql dbms_shared_pool.unkeep为反操作. 实验如下:(实验环境 11.2.0.1) 执行一个sql,并查看其在shared_pool 中的address和hash_value值.yang@rac1>select count(*) from yang_a;   COUNT(*) ----------         29yang

某内存池中的指针用法

内存池实现有许多种,各有不同的优缺点. 这里不是主要说内存池,只是觉得这个内存池中的指针用得很飘逸! template <class T,int AllocSize = 50>   class MemPool   {   public:       static void* operator new(size_t allocLength)       {           if(!mStartPotinter)           {               MyAlloc();    

java中线程池的使用(ThreadPoolExecutor)

一.为什么使用线程池: 1.降低资源消耗.主要指的是降低创建和销毁线程时产生的cpu资源消耗,线程池通过持续工作的线程执行不断分配的新任务,来减少频繁的线程创建与销毁. ##2.提高响应速度.同上 ##3.提高线程的可管理性.线程是稀缺资源,频繁的创建销毁,以及没有控制的大量创建,都会影响系统的稳定性.使用线程池可以统一分配,调优,监控资源. 二.如何创建线程池: new ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long

深入解析C++编程中线程池的使用_C 语言

为什么需要线程池目前的大多数网络服务器,包括Web服务器.Email服务器以及数据库服务器等都具有一个共同点,就是单位时间内必须处理数目巨大的连接请求,但处理时间却相对较短. 传 统多线程方案中我们采用的服务器模型则是一旦接受到请求之后,即创建一个新的线程,由该线程执行任务.任务执行完毕后,线程退出,这就是是"即时创建,即 时销毁"的策略.尽管与创建进程相比,创建线程的时间已经大大的缩短,但是如果提交给线程的任务是执行时间较短,而且执行次数极其频繁,那么服务器将处于 不停的创建线程,销

c3p0连接池中获取的Connection对象的close()方法是真的把连接给关闭了?

问题描述 c3p0连接池中获取的Connection对象的close()方法是真的把连接给关闭了? 自己做写了一个管理数据源的DBManager,构想中从数据源里面获取的Connection使用完之后执行close()方法,然后把Connection对象闲置回连接池中. 但是测试出来的结果好像每次执行close()之后connection就销毁了. 代码如下: DBManager.java package ben.DBUtils; import java.sql.Connection; impo

java 断开从连接池中获取的连接,规范的操作是怎样的

问题描述 java断开从连接池中获取的连接,规范的操作是怎样的,ResultSet,PreparedStatement,Connection是否需要依次关闭,若需要,应该怎么做才是高效率,规范,而且不会发生内存泄露.涉及到很多try和catch,不知怎么处理. 解决方案 解决方案二:ResultSet,PreparedStatement,Connection是否需要依次关闭需要应该怎么做才是高效率写一个函数用来关闭,如放在的帮助类JdbcUtil里,如publicstaticvoidreleas

class字节码中常量池不连续

问题描述 class字节码中常量池不连续 求助一下,这几天在看jvm的class结构定义,用javap -v 反编译一个项目中的类,发现常量池编号不连续, 少了编号为126 和 138 的常量,这是为什么 解决方案 Class文件内容和常量池Class文件内容及常量池Class文件内容及常量池

executor-关于线程池中get()的疑问

问题描述 关于线程池中get()的疑问 如果我的文件夹下共有五个空文件,2个txt文档,那么会产生6个线程,但是为什么在下面代码中count只出现了5次?每个线程都会运行到这段代码的啊. for (Future<Integer> futureItem : results) { count += futureItem.get(); System.out.println("count出现了一次"); } 运行结果如下: 代码如下: public class ThreadPool

《C#多线程编程实战(原书第2版)》——3.6 在线程池中使用等待事件处理器及超时

3.6 在线程池中使用等待事件处理器及超时 本节将描述如何在线程池中对操作实现超时,以及如何在线程池中正确地等待. 3.6.1 准备工作 为了学习本节,你需要安装Visual Studio 2015.除此之外无需其他准备.本节的源代码放置在BookSamples\Chapter3\Recipe5目录中. 3.6.2 实现方式 请执行以下步骤来了解在线程池中实现超时及正确的等待: 1.启动Visual Studio 2015.新建一个C#控制台应用程序项目. 2.在Program.cs文件中加入以