Oracle常見UNDO等待事件

guocun09發表於2023-10-21

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部落格 ” ,連結:http://blog.itpub.net/25583515/viewspace-2990280/,如需轉載,請註明出處,否則將追究法律責任。

相關文章