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

OCEANBASE HOW TO 定位行锁阻塞

原创 范计杰 2024-06-18
192

适用范围

OCEANBASE定位处理行锁阻塞问题

行锁相关视图

__all_virtual_trans_lock_stat 记录了当前集群中所有活跃事务持有行锁的相关信息

列名 说明
rowkey 表示持有锁的行的 rowkey。
session_id 持有锁的事务所属的会话唯一 ID。
proxy_id 表示持有锁的事务所属客户端 OBProxy/Java Client 对应的 IP 地址与端口号。
trans_id 表示持有锁的事务的唯一 ID。

__all_virtual_lock_wait_stat 统计了当前集群中所有等待行锁的请求或语句的相关信息

列名 说明
session_id 等待锁的事务所属的会话唯一 ID。
proxy_id 表示等待锁的事务所属客户端 OBProxy/Java Client 对应的 IP 地址与端口号。
trans_id 表示等待锁的事务的唯一 ID。
lock_ts 表示该请求开始等待锁的时间点。
abs_timeout 表示等待锁的语句的绝对超时时间。
try_lock_times 表示等待锁的语句重试加锁的次数。
block_session_id 表示在该行第一个等待事务的 session_id

定位与处理

关联__all_virtual_trans_lock_stat,__all_virtual_lock_wait_stat定位waiter,blocker


select b.tenant_id,
       a.table_id,
       (select table_name
          from __all_virtual_table
         where tenant_id = b.tenant_id
           and table_id = a.table_id) table_name,
       a.rowkey,
       a.svr_ip waiter_ip,
       a.session_id waiter_session,
       b.svr_ip blocker_ip,
       b.session_id blocker_session,
       concat('kill ', b.session_id) killsql
  from __all_virtual_lock_wait_stat a, __all_virtual_trans_lock_stat b
 where a.table_id = b.table_id
   and a.rowkey = replace(b.rowkey, 'DECIMAL', 'NUMBER')\G

*************************** 1. row ***************************
      tenant_id: 1001
       table_id: 1100611139453814
     table_name: TESTTAB
         rowkey: table_id=1100611139453814 rowkey_object=[{"NUMBER":"10000000"}] 
      waiter_ip: 192.168.0.37
**waiter_session: 3221801355**
     blocker_ip: 192.168.0.37
**blocker_session: 3221801241**
        killsql: kill 3221801241
1 row in set (0.074 sec)

登录blocker observer(192.168.0.37),kill blocker session

kill 3221801241
最后修改时间:2025-03-19 17:25:14
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论