一次数据库死锁故障的分析过程.docx
1.背景概述客户的监控告警频繁提示系统XX数据库死锁增长个数商于当前阈值_当前值1.00.下面是详细的故障分析诊断过程,以及详细的解决方案描述.2 .故障分析2.1 故阳现独登录到系统,从数据库到alert日志可以发现的确存在很多ORA-60的信息,截取部分如下:12COOZ3T»00644M10002XXXge<MA40060GtobeiEguuSmcmDmMigctadSmNof81l/yO*cIorTdmMhoatrQORA3EtmM×Mtomte3«*0pcc>d>>fdb<Y*2ld1v19b>JUux<2'Ve)ouxu2.or.1?7406trc42O2g*Z11匕(M8032383(Xf11sjOagnotticSBGSOkxyagnpNCQoo4231932g.r*quMtgn<u11c9a2Bdr2789;un*ry-Mro11np*ocM11nE2Cg443Y府S2548310087XXXDORA40060QlobeiEnQtiM8rvmMtedSmHofMtMWyOriIerT,8bMM11QORA-MEfmMo<Mto<n8"c6Cfc*g>,gmNldIVl%3u02VGmooc02-S2733lrc92CGOO<Z3T忖*XRMOOOOO10C*vnQ4kgrmhcVWdb*ckxyk>>nP.M00<Z31J2S4:.f*UMtd如*lnUnc7od'2113).uwe7-jtbr011npocwmnMrt,110o4-a!»5?5ooa»12XXXD6淖IoRA4030GIoMEgUuSvkm(*dioc<Mc*3SmNo<601MWyOrdWTaiTvxAnQORA3EmxM<x*os«t3<rcaccrc*<S*>rdDm2ld¼19ccw(2Vmw2.(V.12442trc2.2 故障根源查看trc内容,发现是自身导致的阻塞,几个trc都类似,下面截取其中一个trc跟踪日志的关储内容:(点击可放大图片)可以发现都是deletefromtx_XXXX_XXXXX_XXXX这张表,死锁现蕊是Singleresourcedeadlock,而且TYPE是TM,综合分析这种现象,大多就是外健没有索引导致.c.ForsingleresourcedeadlockonTMenqueue,missingforeignkeyindexisoftenthecause,pleasecheckcase3forthesolution.进一步获取建表语句叠看约束部分,发现只有主键,没有外援:查询ZJY用户下所有存在外键的表:进一步分析,其中T8_BOND_ACC_XXXXXXX的外键就是引用了TX_XXXX_XXXXX_XXXX的主健ID列:selectdbms_metadata.get_ddl(,TAB1.E",'T8_BoND_ACJXXXXXXX','ZJY')fromdual;REFERENCES',Z3Y,'."TX_XXXX_XXXXX_XXXX"("ID")ONDE1.ETECASCADEENAB1.E2.3 故障处置业务闲时,在T8_BoND_ACC_XXXXXXX表的外键列TX_XXXXX_XXXX_ID上创建索引,再观察告瞥情况.createindexTXXXXXXXXXXIDonT8BONDACCXXXXX×X(TXXXXXXXXXXID)online;注:上面是示范创建语句,具体创建索引的语句,比如是否采用Online,是否使用并行等参照行里运维具体规范.3 .根本解决方案及建议虽然本次告警信息未发现其他表的全局死锁问题,但从Orade的设计层面来看,建议在在所有7个表的外援列上都创建对应的索引,防止后续在其他表大量DM1.时出现同类问题.此外,算盘的时候发现,trc跟踪日志的这一部分信息:resource×5bflflc38resname:(0×llecf(e×fTMext0×fffdbbf8,0×0jdomid0x4这里的Oxllecf转换为10进制,就是对应的外犍无索引对象的。bjecjid.