哪位大佬分享一个锁等待和死锁的排查过程嘛
需求同上,学习学习
select
/*+QUERY_TIMEOUT(3600000000) read_consistency(weak) */
b.TRANS_ID,
case
WHEN b.TYPE = ‘TM’ THEN ‘表锁’
WHEN b.TYPE = ‘TX’ THEN ‘事务锁’
WHEN b.TYPE = ‘TR’ THEN ‘行锁’
ELSE NULL
END
AS lock_type,
ID1,
LMODE,
CASE
WHEN BLOCK = 0 THEN ‘该事务持有锁’
WHEN BLOCK = 1 THEN ‘该事务被阻塞’
ELSE NULL
END
as BLOCK,
a.SVR_IP,
ID,
user,
command,
time,
total_time,
STATE,
info,
retry_cnt,
retry_info,
thread_id,
trace_id
from
gv$ob_processlist a,
GV$OB_LOCKS b,
oceanbase.CDB_ob_table_locations c
where
a.trans_id = b.trans_id
and c.table_name = ‘表名称’
and (
ID1 like concat(’%’ , c.table_id, ‘%’)
OR ID1 like concat(’%’ , c.tablet_id ,’%’)
);
死锁可以查这个表
oceanbase.DBA_OB_DEADLOCK_EVENT_HISTORY
官网文档有查看当前状态的行锁,如果是历史行锁那就只有根据observer.log来排查了
https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000001012955?back=kb
点赞
DBA_OB_DEADLOCK_EVENT_HISTORY,差不多得查这个视图
v4.3.5
ERROR 1146 (42S02): Table ‘oceanbase.cdb_ob_table_locations’ doesn’t exist
你是在sys租户下查的么?
如果查询死锁需要查询DBA_OB_DEADLOCK_EVENT_HISTORY这个视图,如果查询锁的问题查询gv$ob_locks,如果问题已经发生过了,需要分析observer的日志,通过过滤关键子 conflict查找那些事务阻塞了那些事务
sys可以了。
不错,需要自己测试下