某用户反映数据库中有一个账号的费用结算有问题,排查数据库状态,发现有一个不常见的等待事件,PROGRAM:oracle@db01 (RECO),EVENT:enq: DR - contention(阻塞源头是RAC另一个节点的RECO进程,此进程等待事件为single-task message),USERNAME名为ORA_RECO_070361;查询这种等待事件基本上没有相关资料,结合RECO进程作用分析,应该是分布式事务异常引起的。

排查dba_2pc_pending视图,有将近300个分布式事务处于异常状态,人工清理这些异常事务后,过几小时后观察RECO进程的等待依然存在。MOS上有一篇RECO Process Fails with ORA-476 or ORA-444 (Doc ID 761852.1)介绍了RECO进程的一些机制,提到:If the RECO process fails to connect with a remote server, RECO automatically tries to connect again after a timed interval. However, RECO waits an increasing amount of time (growing exponentially) before it attempts another connection.   推测可能与这个尝试重连时指数级增长的间隔有关。

处理:由于是核心系统,我们计划在晚上重启节点2(节点2的RECO进程阻塞了节点1);在重启节点2时,发现数据库无法关闭,人工KILL掉RECO进程后,才可以关闭数据库;重启数据库后,RECO进程的等待事件恢复正常的rdbms ipc message

相关日志如下:

异常的等待事件及阻塞关系 :
SQL> /USERNAME      INST_ID        SID PROGRAM              MACHINE                   SQL_ID          EVENT                        BLOCKING_SESSION BLOCKING_INSTANCE
---------- ---------- ---------- -------------------- ------------------------- --------------- ---------------------------- ---------------- -----------------1       2361 oracle@db01 (RECO)   db01                                      enq: DR - contention                 2361                  2
ORA_RECO_0          2       2361 oracle@db02 (RECO)   db02                                      single-task message
70361
==========
KILL异常的分布式事务:
SQL>  select 'exec dbms_transaction.purge_lost_db_entry(  '''||local_tran_id||''' );     commit;' from dba_2pc_pending ;'EXECDBMS_TRANSACTION.PURGE_LOST_DB_ENTRY('''||LOCAL_TRAN_ID||''');COMMIT;'
-----------------------------------------------------------------------------------
exec dbms_transaction.purge_lost_db_entry(  '1.10.261698' );     commit;
exec dbms_transaction.purge_lost_db_entry(  '1.20.258134' );     commit;处理后正常的等待事件:
SQL> select   USERNAME,INST_ID,sid,program,machine,sql_id,event,BLOCKING_SESSION,BLOCKING_INSTANCE 2  from gv$session where program like '%REC%';USERNAME      INST_ID        SID PROGRAM              MACHINE                   SQL_ID          EVENT                        BLOCKING_SESSION BLOCKING_INSTANCE
---------- ---------- ---------- -------------------- ------------------------- --------------- ---------------------------- ---------------- -----------------2       2361 oracle@db02 (RECO)   db02                                      rdbms ipc message1       2361 oracle@db01 (RECO)   db01                                      rdbms ipc message

一次不常见的等待事件:RECO进程enq: DR - contention相关推荐

  1. 【等待事件】序列等待事件总结(enq: SQ - contention、row cache lock、DFS lock handle和enq: SV - contention)...

    [等待事件]序列等待事件总结(enq: SQ - contention.row cache lock.DFS lock handle和enq: SV - contention) [等待事件]序列等待事 ...

  2. oracle常见等待事件,必看干货 | Oracle 常见的等待事件说明(下)

    原标题:必看干货 | Oracle 常见的等待事件说明(下) [上期回顾]干货 | Oracle 常见等待事件说明(上)( 点击可查看) 16.Library cache pin 这个等待事件和 li ...

  3. 【性能优化】 之 几种常见的等待事件的演示示例

    内容大纲: 1.分别用表和索引上数据的访问来产生db file scattered read等待事件,等待事件需要在v$session_wait和10046 trace文件中显示出来,贴出整个演示过程 ...

  4. mysql等待事件类型_Oracle中常见的33个等待事件小结

    在Oracle 10g中的等待事件有872个,11g中等待事件1116个. 我们可以通过v$event_name 视图来查看等待事件的相关信息 一. 等待事件的相关知识 1.1 等待事件主要可以分为两 ...

  5. Oracle 常见的33个等待事件

    Oracle 常见的33个等待事件 一. 等待事件的相关知识: 1.1 等待事件主要可以分为两类,即空闲(IDLE)等待事件和非空闲(NON-IDLE)等待事件. 1). 空闲等待事件指ORACLE正 ...

  6. oracle的空闲等待事件,Oracle 常见的33个等待事件详解

    一. 等待事件的相关知识: 1.1 等待事件主要可以分为两类,即空闲(IDLE)等待事件和非空闲(NON-IDLE)等待事件. 1). 空闲等待事件指ORACLE正等待某种工作,在诊断和优化数据库的时 ...

  7. 11g oracle xe启动_详解Oracle等待事件的分类、发现及优化

    一.等待事件由来 大家可能有些奇怪,为什么说等待事件,先谈到了指标体系.其实,正是因为指标体系的发展,才导致等待事件的引入.总结一下,Oracle的指标体系,大致经历了下面三个阶段: 以命中率为主要参 ...

  8. ORACLE 等待事件

    一.等待事件的相关知识: 1.1 等待事件主要可以分为两类,即空闲(IDLE)等待事件和非空闲(NON-IDLE)等待事件. 1). 空闲等待事件指ORACLE正等待某种工作,在诊断和优化数据库的时候 ...

  9. 全面解析Oracle等待事件的分类、发现及优化

    作者介绍 韩锋,宜信技术研发中心数据库架构师.精通多种关系型数据库,曾任职于当当网.TOM在线等公司,曾任多家公司首席DBA.数据库架构师等职,多年一线数据库架构.设计.开发经验.著有<SQL优 ...

最新文章

  1. 配置导出MOSS2010列表数据到Excel并根据列表记录自动刷新数据
  2. LeetCode 74. Search a 2D Matrix--有序矩阵查找--python,java,c++解法
  3. 2014年,马上要上班啦,希望一切顺利
  4. ASP.NET Core MVC 与 Visual Studio 入门
  5. Google地图更新,更AI更贴心更节约时间,就是不敢来中国
  6. java中visio的作用_Visio软件的概念、用途与特色是什么?
  7. python炫酷烟花表白源代码-python炫酷烟花表白的源代码分享
  8. Hive提取身份证号中年龄和性别
  9. paTJPSb桌趴缀岳凳钟涸
  10. Chinese-ELECTRA ‘adam_m not found in checkpoint ‘
  11. mysql中ddl是什么_mysql ddl什么意思
  12. 表示数字 C语言实现
  13. 多规格的商品选择不同的规格值影响其他规格使之不可选
  14. Word排版-页眉上的横线
  15. 程序员面试闪充--iOS密码学
  16. Redis系列(六)
  17. OpenMV物品清单
  18. (转)工作是一种本能?
  19. 网络广播直播通告:Microsoft Project 2010项目管理概览
  20. 设置FLASH的读写保护及解除—零死角玩转STM32-F429系列

热门文章

  1. 小米笔记本Air 13.3 i5-8250U macOS黑苹果efi引导文件
  2. 正在工作的程序员,生活状态都很苦逼?
  3. Linux4.14加密框架中的主要数据结构(5)—— struct crypto_larval(算法幼虫)
  4. 阿里巴巴余军:钉钉宜搭低代码实践之路
  5. 钉钉开放平台查询宜搭表单实例数据
  6. android系统版本卸掉,使用内置软件卸载最新版本的Android
  7. 电阻、电容、电感及其阻抗、容抗、感抗概念回顾
  8. Python量化交易平台开发教程系列4-事件驱动引擎原理和使用
  9. 基于php抑郁症自检测及初级自治疗网站
  10. 石油工程课程设计c语言,东北石油大学-石油工程抽油设计C语言编程.doc