暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

ODBA技能 Oracle RAC死锁分析

IT界数据库架构师的漂泊人生 2020-12-14
1680

在实践中经常遇到TX死锁,什么是死锁呢?就是甲左手抓了一只鸡,右手想抓鹅。而丙右手抓了一只鹅,左手想去抓鸡。鸡在甲手里,鹅在丙手里。并且只有1只鸡,1只鹅。甲丙两人都很争强好胜之人,都不会退一步,也没得退,谁会放弃手中的肉?


在ORACLE数据库单实例中比较好找出来 主要是通过告警日志ALERT.LOG定位到 DEADLOCK,系统会把对应的进程DUMP出来,而ALERT.LOG会有其路径和名字。您只要VIM 它就行了。里面有ROWID和SQL 就知道了。


而RAC ALERT.LOG 定位出来的路径是LMD0.TRC

根据DID = 16_0_52 去定位29948.TRC内容


在这里无法显示完整的SQL文本,也没有SQL_ID,也没有单实例中的死锁图。后面还有一大段甲骨文内部人员看得懂的信息。


要看具体哪行怎么办?

RAC环境下死锁发生的时候,在系统的BDUMP目录下的DIAG进程的TRACE文件中也会有相关的记录的。首先ps -ef|grep diag找到当前实例的DIAG进程的操作系统进程号,然后根据<SID>_diag_<OSPID>.trc来找到对应的TRACE文件,然后翻到死锁发生的时间点

打开看<SID>_DIAG_29905.TRC

在死锁时间段间DUMP两个跟踪文件。

打开这两个进程文件在文件头部分会显示DUMP的是哪个进程ID

两个进程ID 14301 & 14416 以及对应的会话ID ,而进程ID从LMD0_29948.TRC获得。

最后在文件尾巴部分会有具体的哪行?

OBJ =252920  ROWID=AAA9v4AAaABuggAAAA

对象ID 通过 

SELECT * FROM DBA_OBJECTS WHERE OBJECT_ID=?

行:

SELECT * FROM T WHERE ROWID ='?'

最后修改时间:2020-12-15 10:48:19
文章转载自IT界数据库架构师的漂泊人生,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论