针对select … for update语句,知道它锁了多少行吗?(针对当前执行的或者历史执行的)。
啥版本的ob?
- 对于ob 4.2(含) 以上版本可以参考视图 GV$OB_LOCKS:OceanBase分布式数据库-海量数据 笔笔算数
如果是行锁的话,结合id2可以看到锁定的行rowkey
- 如果低于4.2版本的ob, 结合 行锁持有者(
__all_virtual_trans_lock_stat
),行锁等待者(__all_virtual_lock_wait_stat
)去判断
这个准吗?此前的版本,当 锁住的记录超过一定数量后(可能是某个内部内存使用达到某个限制后),这个视图就不记录了。
不记录的也能理解。当一个事务锁住上千万笔记录,如果在这个视图里记录上千万个rowkey,感觉也很恐怖。
这几张内部表也是有过期机制在的,极端场景下会过期掉数据。所以不能把他当成全量数据来看待。通过这几张内部表能定位到表级别,结合其他视图能定位到具体的session,锁冲突的场景解决问题基本也就够了。