适用范围
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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




