知识大全 Oracle调优与深入之04031处理过程

Posted

篇首语:逆水行舟用力撑,一篙松劲退千寻。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Oracle调优与深入之04031处理过程相关的知识,希望对你有一定的参考价值。

Oracle调优与深入之04031处理过程  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

   一 错误提示   > EXP : ORACLE error encountered  > ORA : unable to allocate bytes of shared memory  ( shared pool BEGIN :EXEC_STR := SYS DBMS PL/SQL MPCODE BAMIMA: Bam Buffe     二 错误原因   共享内存太小 存在一定碎片 没有有效的利用保留区 造成无法分配合适的共享区      三 解决步骤    查看当前环境  SQL>  show sga    Total System Global Area  bytes  Fixed Size           bytes  Variable Size        bytes  Database Buffers      bytes  Redo Buffers         bytes    show parameter shared_pool  NAME                 TYPE  VALUE     shared_pool_reserved_size      string    shared_pool_size           string      SQL> select sum(free_space) from v$shared_pool_reserved;    SUM(FREE_SPACE)          我们可以看到没有合理利用保留区    SQL> SELECT SUM(RELOADS)/SUM(PINS) FROM V$LIBRARYCACHE;    SUM(RELOADS)/SUM(PINS)          不算太严重  SQL> SELECT round((B Value/A Value)* ) hardpaseperc  FROM V$SYSSTAT A   V$SYSSTAT B  WHERE A Statistic# =   AND B Statistic# =   AND ROWNUM = ;    hardpaseperc           查看保留区使用情况  SQL>  SELECT FREE_SPACE   FREE_COUNT   REQUEST_FAILURES   REQUEST_MISSES   LAST_FAILURE_SIZE  FROM V$SHARED_POOL_RESERVED;    FREE_SPACE FREE_COUNT REQUEST_FAILURES REQUEST_MISSES LAST_FAILURE_SIZE                                        最近一次申请共享区失败时该对象需要的共享区大小     select name from v$db_object_cache where sharable_mem = ;  name     dbms_lob     dbms_lob正是exp时申请保留区的对象   查看导致换页的应用  SQL> select * from x$ksmlru where ksmlrsiz> ;    ADDR   INDX  INST_ID KSMLR   KSMLRSIZ KSMLRNUM KSMLRHON KSMLROHV KSMLRSES     A       BAMIMA: Bam Buffer       DBMS_DDL DEB C     ACC       BAMIMA: Bam Buffer       DBMS_SYS_SQL D      B       BAMIMA: Bam Buffer      STANDARD D E      B       BAMIMA: Bam Buffer      DBMS_LOB DA C     B       BAMIMA: Bam Buffer      DBMS_UTILITY C FC      BDC       BAMIMA: Bam Buffer      begin : := dbms_lob getLeng   CFFCC     C       state objects             C       library cache         EXU VEW  C C      CA       state objects         C B      CEC       state objects        D      分析各共享池的使用情况  SQL> select KSPPINM KSPPSTVL  from x$ksppi   x$ksppcv  where x$ksppi indx = x$ksppcv indx  and KSPPINM = _shared_pool_reserved_min_alloc ;    KSPPINM     KSPPSTVL       _shared_pool_reserved_min_alloc     (门值)    我们看到INDX= DBMS_LOB造成换页(就是做exp涉及到lob对象处理造成的换页情况) 换出  最近未使用的内存 但是换出内存并合并碎片后在共享区仍然没有合适区来存放数据 说明共享  区小和碎片过多 然后根据_shared_pool_reserved_min_alloc的门值来申请保留区 而门值为   所以不符合申请保留区的条件 造成 错误 我们前面看到保留区全部为空闲状态 所以我们可以  减低门值 使更多申请共享内存比 小的的对象能申请到保留区 而不造成 错误      解决办法    ) 增大shared_pool (在不DOWN机的情况下不合适)   ) 打patch  (在不DOWN机的情况下不合适)   ) 减小门值 (在不DOWN机的情况下不合适)  因为LAST_FAILURE_SIZE<_shared_pool_reserved_min_alloc所以表明没有有效的使用保留区  SQL> alter system set _shared_pool_reserved_min_alloc = ;  alter system set _shared_pool_reserved_min_alloc =   *  ERROR at line :  ORA : specified initialization parameter cannot be modified     i的使用方法alter system set _shared_pool_reserved_min_alloc = scope=spfile;     ) 使用alter system flush shared_pool; (不能根本性的解决问题)   ) 使用dbms_shared_pool keep     由于数据库不能DOWN机 所以只能选择 )和 )  运行dbmspool sql  SQL> @/home/oracle/products/ /rdbms/admin/dbmspool sql  找出需要keep到共享内存的对象    SQL> select a OWNER   a name   a sharable_mem   a kept   a EXECUTIONS   b address   b hash_value  from v$db_object_cache a   v$sqlarea b  where a kept = NO and  (( a EXECUTIONS >   and a SHARABLE_MEM > )  or a EXECUTIONS > )  and SUBSTR(b sql_text ) = SUBSTR(a name );  OWNER  NAME            SHARABLE_MEM KEP EXECUTIONS ADDRESS HASH_VALUE     —     SELECT COUNT(OBJECT_ID)       NO     BF   FROM ALL_OBJECTS  WHERE OBJECT_NAME = :b   AND OWNER = :b     STANDARD               NO    DBMS_LOB             NO    DBMS_LOB            NO    DBMS_LOB            NO    DBMS_PICKLER             NO    DBMS_PICKLER              NO      SQL> execute dbms_shared_pool keep( STANDARD );  SQL> execute dbms_shared_pool keep( BF C );  SQL> execute dbms_shared_pool keep( DBMS_LOB );  SQL> execute dbms_shared_pool keep( DBMS_PICKLER );  SQL> select OWNER name sharable_mem kept EXECUTIONS from v$db_object_cache where kept = YES ORDER BY sharable_mem;  SQL> alter system flush shared_pool;  System altered     SQL> SELECT POOL BYTES FROM V$SGASTAT WHERE NAME = free memory ;    POOL       BYTES     shared pool     large pool      java pool         [oracle@ali solution oracle]$ sh /home/oracle/admin/dbexp sh    [oracle@ali solution oracle]$ grep ORA /tmp/exp tmp  未发现错误 导出数据成功     四 建议   由于以上解决的方法是在不能DOWN机的情况下 所以没能动态修改初始化参数   但问题的本质是共享区内存过小 需要增加shared pool 使用绑定变量 才能根本  的解决问题 所以需要在适当的时候留出DOWN机时间 对内存进行合理的配置 cha138/Article/program/Oracle/201311/17486

相关参考

知识大全 Oracle] RAC 之 - 负载均衡深入解析

Oracle]RAC之-负载均衡深入解析  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!负载均衡是指

知识大全 Oracle性能调优思路

Oracle性能调优思路  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  问oracle进程内存占

知识大全 Oracle专家调优秘密

Oracle专家调优秘密  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在过去的十年中Oracl

知识大全 ORACLE性能调优原则下篇

ORACLE性能调优原则下篇  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  用户SQL质量   

知识大全 Oracle内存参数调优技术详解

Oracle内存参数调优技术详解  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  目的  希望通过

知识大全 ORACLE性能调优原则上篇(列表)

ORACLE性能调优原则上篇(列表)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  任何事情都有

知识大全 通过Oracle动态性能视图采集查询调优数

通过Oracle动态性能视图采集查询调优数  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  对于现

知识大全 ORACLE性能调优遵循的基本原则

ORACLE性能调优遵循的基本原则  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  任何事情都有它

知识大全 可预见的Oracle应用程序性能调优

可预见的Oracle应用程序性能调优  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!这篇技巧性文章是

知识大全 Oracle数据库索引优化技术关联查询性能调优

Oracle数据库索引优化技术关联查询性能调优  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  数