ITPub博客

首页 > 数据库 > Oracle > Oracle常见UNDO等待事件

Oracle常见UNDO等待事件

原创 Oracle 作者:guocun09 时间:2023-10-21 18:19:50 0 删除 编辑

latch:undo global data

通常是undo tablespace datafile达到上限后,DBA_UNDO_EXTENTS.STATUS=EXPIRED 没有或者很少了。 Oracle需要将UN EXPIRED状态变为 EXPIRED后DML才能执行,这是 主要等待时间。

解决方法 : 修改undo_retention改小,或增加undo datafile



enq: US - contention

通常是DML并发 量增加(例: 两节点RAC,一节点业务,一节点空闲,业务节点crash failover到空闲节点后发生此等待), Oracle需从undo tablespace中分配大量online状态的rollback segment供DML操作使用,这是主要等待时间。

解决方法 : 将_rollback_segment_count 参数设置较大的固定值,比如无脑设置6000

alter system set "_rollback_segment_count"=6000 scope=both sid='*';

PS: 可以查看V$UNDOSTAT.MAXCONCURRENCY 这是DB启动后配置过的最大的 rollback_segment_count



latch: row cache objects (dc_rollback_segments)

通常是undo tablespace datafile size不足时自动扩展导致, 这是主要等待时间。

解决方法 : 将 undo tablespace datafile size调大/多增加几个,并设置为不自动扩展 ,如:

alter database datafile '/oradata/orcl/undotbs01.dbf' resize 32767M ;

alter tablespace undotbs1 add datafile '/oradata/orcl/undotbs02.dbf' size 32767M autoextend off;

检查latch过程:

通过取ASH中P1 值

select p1 from  v$active_session_history where EVENT='latch: row cache objects' ;

计算P1值十六进制:

SELECT to_char(p1,'XXXXXXXXXXXXXX') FROM DUAL;

--------------

123BF1CB9

检查latch对象

SELECT kqrsttxt PARAMETER,

       kqrstcid CACHE#,

       kqrstcln "Lchild#",

       kqrstgrq "DCGets",

       l.gets   "LGets",

       l.misses "Misses",

       l.addr

  FROM X$KQRST, V$LATCH_CHILDREN l

 WHERE l.addr like  '%123BF1CB9'

   and l.child# = KQRSTCLN


PARAMETER                            CACHE#    Lchild#     DCGets      LGets   Misses ADDR

-------------------------------- ---------- ---------- ---------- ---------  ---------- ----------------

dc_rollback_segments                      3          1   ................

或:

select la.addr laaddr,dc.kqrstcid CACHE#, dc.kqrsttxt PARAMETER,

decode(dc.kqrsttyp, 1,'PARENT','SUBORDINATE') type,

decode(dc.kqrsttyp, 2, kqrstsno, null) subordinate#,

dc.kqrstgrq rcgets, dc.kqrstgmi rcmisses, dc.kqrstmrq rcmodifications,

dc.kqrstmfl rcflushes, dc.kqrstcln,

la.gets lagets, la.misses lamisses, la.immediate_gets laimge

from x$kqrst dc,

v$latch_children la

where dc.inst_id = userenv('instance')

and la.child# = dc.kqrstcln

and la.name = 'row cache objects'

and la.ADDR like '%123BF1CB9';



来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/25583515/viewspace-2990280/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: 没有了~
请登录后发表评论 登录
全部评论
DBA,掌握Oracle,SQLServer,MySQL,hadoop,casscandra等数据库。喜爱深入研究数据库技术原理,擅长管理和优化工作。

注册时间:2011-10-02

  • 博文量
    177
  • 访问量
    686665