Heim > Datenbank > MySQL-Tutorial > Ora-04031 问题诊断思路

Ora-04031 问题诊断思路

WBOY
Freigeben: 2016-06-07 17:26:22
Original
1024 Leute haben es durchsucht

我们看到INDX=5,DBMS_LOB造成换页(就是做exp涉及到lob对象处理造成的换页情况),换出最近未使用的内存,但是换出内存并合并碎片后在

--一、错误提示:
> EXP-00008: Oracle error 4031 encountered
> ORA-04031: unable to allocate 4096 bytes of shared memory
("shared pool","BEGIN :EXEC_STR := SYS.DBMS...","PL/SQL MPCODE","BAMIMA: Bam Buffe
--二、错误原因:
--    共享内存太小,,存在一定碎片,没有有效的利用保留区,造成无法分配合适的共享区。
--三、解决步骤:
--1.查看当前环境
SQL>  show sga  Total System Global Area 566812832 bytes
  Fixed Size 73888 bytes    Variable Size 28811264 bytes
  Database Buffers 536870912 bytes    Redo Buffers 1056768 bytes
  show parameter shared_pool 
  NAME TYPE VALUE :  shared_pool_reserved_size string 1048576
  shared_pool_size string 20971520
SQL> select sum(free_space) from v$shared_pool_reserved;
  SUM(FREE_SPACE) :  1048576
--我们可以看到没有合理利用保留区
--2.查看保留区使用情况
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
  ---------- ---------- ---------------- -------------- -----------------
  1048576 1 146 0 4132
-- 最近一次申请共享区失败时该对象需要的共享区大小4132
select name from v$db_object_cache where sharable_mem = 4132;
  name :dbms_lob


--3.分析各共享池的使用情况
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  4400 --(门值)
--  我们看到INDX=5,DBMS_LOB造成换页(就是做exp涉及到lob对象处理造成的换页情况),换出最近未使用的内存,但是换出内存并合并碎片后在共享区仍然没有合适区来存放数据,说明共享区小和碎片过多,然后根据_shared_pool_reserved_min_alloc的门值来申请保留区,而门值为4400,所以不符合申请保留区的条件,造成4031错误。我们前面看到保留区全部为空闲状态,所以我们可以减低门值,使更多申请共享内存比4400小的的对象能申请到保留区,而不造成4031错误。


--4.解决办法:
--1).增大shared_pool (在不DOWN机的情况下不合适)
--2).打patch  (在不DOWN机的情况下不合适)
--3).减小门值 (在不DOWN机的情况下不合适)
--  因为LAST_FAILURE_SIZE<_shared_pool_reserved_min_alloc>SQL> alter system set "_shared_pool_reserved_min_alloc" = 4000;
alter system set "_shared_pool_reserved_min_alloc"=4000
    *
ERROR at line 1:
ORA-02095: specified initialization parameter cannot be modified
-- 9i的使用方法alter system set shared_pool_reserved_min_alloc"=4000 scope=spfile;
--4).使用alter system flush shared_pool; (不能根本性的解决问题)
-- 5).使用dbms_shared_pool.keep

linux

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage