[20130904]等待事件wait for a undo record.txt

简介: [20130904]等待事件wait for a undo record.txt生产系统出现严重的等待事件,出现问题时我不在现场,这个事后的分析。检查慢的时段的awr报表,可以发现出现了wait for a undo record等待事件,这个问题以前没有遇到。
[20130904]等待事件wait for a undo record.txt

生产系统出现严重的等待事件,出现问题时我不在现场,这个事后的分析。

检查慢的时段的awr报表,可以发现出现了wait for a undo record等待事件,这个问题以前没有遇到。

Top 5 Timed Events                                         Avg %Total
~~~~~~~~~~~~~~~~~~                                        wait   Call
Event                                 Waits    Time (s)   (ms)   Time Wait Class
------------------------------ ------------ ----------- ------ ------ ----------
db file sequential read           1,651,116      24,802     15   48.4   User I/O
CPU time                                         11,499          22.4           
wait for a undo record              191,327      11,153     58   21.7      Other
buffer busy waits                 2,637,172       6,101      2   11.9 Concurrenc
log buffer space                      3,931       3,551    903    6.9 Configurat
          -------------------------------------------------------------       

google发现相关链接:http://www.itpub.net/thread-1328358-1-1.html

SQL> select * from V$FAST_START_TRANSACTIONS;
 USN  SLT        SEQ STATE      UNDOBLOCKSDONE UNDOBLOCKSTOTAL     PID    CPUTIME  PARENTUSN  PARENTSLT  PARENTSEQ XID              PXID  RCVSERVERS
---- ---- ---------- ---------- -------------- --------------- ------- ---------- ---------- ---------- ---------- ---------------- ----- ----------
  35    6      87390 RECOVERED           29379           29379                184                                  230006005E550100               48
  92   39       6748 RECOVERED           14749           14749                241                                  5C0027005C1A0000                1
  49   38      70834 RECOVERED           36979           36979                173                                  31002600B2140100               48
  20   43     141597 RECOVERED            3444            3444                 45                                  14002B001D290200               48

select * from v$event_name where name like 'wait for a undo record';
    EVENT#   EVENT_ID NAME                   PARAMETER1  PARAMETER2  PARAMETER3  WAIT_CLASS_ID WAIT_CLASS# WAIT_CLASS
---------- ---------- ---------------------- ----------- ----------- ----------- ------------- ----------- ----------
       587 3020078888 wait for a undo record                                        1893977003           0 Other
--没有参数的说明。

从XID='230006005E550100'来找线索。

SQL> select * from FLASHBACK_TRANSACTION_QUERY where xid=hextoraw('230006005E550100');
XID               START_SCN START_TIMESTAMP     COMMIT_SCN COMMIT_TIMESTAMP    LOGON_USER  UNDO_CHANGE# OPERATION  TABLE_NAME TABLE_OWNER  ROW_ID   UNDO_SQL
---------------- ---------- ------------------- ---------- ------------------- ----------- ------------ ---------- ---------- ------------ ------  ---------
230006005E550100 9932260717 2013-09-03 16:54:08 9933165192 2013-09-03 17:08:58 XXXXXXXXXX              1 BEGIN

--说明:这个视图查看有一定时间,也许时间久了在这里看不到,也许使用IMU的原因,看不到UNDO_SQL语句。时间2013-09-03 16:54:08到2013-09-03 17:08:58。

SQL> select * from V$ACTIVE_SESSION_HISTORY where xid=hextoraw('230006005E550100');

--输出太多,忽略。从里面可以知道sql_id.
--说明:这个视图查看有一定时间,也许时间久了在这里看不到.可以使用DBA_HIST_ACTIVE_SESS_HISTORY代替。
SQL> select * from DBA_HIST_ACTIVE_SESS_HISTORY where xid=hextoraw('230006005E550100')

SQL> select distinct sql_id from V$ACTIVE_SESSION_HISTORY where xid=hextoraw('230006005E550100');
SQL_ID
-------------
ftm564rm196my

SQL> select * from v$sql where sql_id='ftm564rm196my';
no rows selected

--已经不在shared pool。

SQL> select * from DBA_HIST_SQLTEXT where sql_id='ftm564rm196my';
      DBID SQL_ID        SQL_TEXT                                                                         COMMAND_TYPE
---------- ------------- -------------------------------------------------------------------------------- ------------
 168324986 ftm564rm196my update ZY_FYMX SET YJRQ =:1 WHERE ZY_FYMX.JFRQ 
                         
SQL> select * from DBA_HIST_SQLBIND where sql_id='ftm564rm196my';
no rows selected
--无法获得绑定变量的值。

SQL> select * from DBA_HIST_SQL_PLAN where sql_id='ftm564rm196my';
no rows selected
--执行计划也无法获得?why?查询awr报表也没有记录。有点奇怪!

直接看sql语句。
update ZY_FYMX SET YJRQ =:1 WHERE ZY_FYMX.JFRQ
-- 表ZY_FYMX的大小2.3G。
-- 猜测一下 YJRQ 表示月结日期 JFRQ表示什么日期呢?直接输入汉语拼音开头jf,好像表示计费,问一下开发确实这样。
-- [ 补充:我个人非常讨厌这种字段的命名方式,更加要命的是一些开发根本没有文档说明,或者根本不全]。
-- 这样就很明显,正好是月头,财务做扎帐处理,表仅仅在JFRQ字段上有索引。ZY_FYMX.JFRQ -- 而查询ZY_FYMX.YJRQ 的条件是ZY_FYMX.YJRQ IS NULL,很明显即使存在yjrq的索引也没有用。因为查询条件是NULL。
-- 正常如果每个月都做月结,YJRQ is NULL的信息应该会很少,建立一个函数索引也许能解决这个问题。

-- 执行计划应该是全部扫描,操作人员一定觉得慢,没有等待结束就退出,导致大量事务rollback,出现wait for a undo record的情况。


SELECT distinct xid,session_id,sql_id
  FROM DBA_HIST_ACTIVE_SESS_HISTORY
 WHERE xid IN
          (HEXTORAW ('14002B001D290200'),
           HEXTORAW ('31002600B2140100'),
           HEXTORAW ('5C0027005C1A0000'),
           HEXTORAW ('230006005E550100'))
order by xid;

XID              SESSION_ID SQL_ID
---------------- ---------- -------------
14002B001D290200       2274 9a4dwk6bdus8m
14002B001D290200       2274 b5nzc0t42sjut
14002B001D290200       2274 ftm564rm196my
230006005E550100        466 ftm564rm196my
31002600B2140100       2393 b5nzc0t42sjut
31002600B2140100       2393 ftm564rm196my
5C0027005C1A0000       1052 ftm564rm196my
5C0027005C1A0000       1052

8 rows selected.

--xid相同涉及到sql_id还有9a4dwk6bdus8m,b5nzc0t42sjut,很奇怪这两个sql_id事后无法查询到对应的sql语句。不过基本可以确定问题。

目录
相关文章
|
11月前
|
SQL 关系型数据库 MySQL
|
存储 缓存 数据处理
完全揭秘log file sync等待事件
什么是log file sync等待事件呢?在一个提交(commit)十分频繁的数据库中,一般会出现log file sync等待事件,当这个等待事件出现在top5中,这个时侯我们需要针对log file sync等待事件进行优化,一定要尽快分析并解决问题,否则当log file sync等待时间从几毫秒直接到20几毫秒可能导致系统性能急剧下降,甚至会导致短暂的挂起。
完全揭秘log file sync等待事件
|
NoSQL 关系型数据库 MySQL
如何查找到底是谁执行了FTWL导致Waiting for global read lock
在MySQL · 特性分析 · 到底是谁执行了FTWL中 文章中,分析了为何出现大量Waiting for global read lock的连接。但是实际操作起来很多gdb版本不支持pset操作,而且连接过多,导致不可能手动打印每一个THD的state,所以笔者写了一个gdb的脚本供大家使用: 首先,先保存下面脚本到/tmp/getlockconn MySQL8.
2547 0
|
测试技术
[20171123]Skip Locked and ITL slot 2.txt
[20171123]Skip Locked and ITL slot 2.txt --//昨天看链接提到Skip Locked and ITL slot相关问题,链接 http://jonathanlewis.
1073 0
|
关系型数据库 Oracle iOS开发
|
关系型数据库 Oracle iOS开发