TokuDB特性分析-行锁(row-lock)与区间锁(range-lock)
简介
TokuDB使用LockTree(ft-index/locktree)来维护事务的锁状态(row-lock和range-lock),LockTree的数据结构是一个Binary Tree。 本篇将通过几个“栗子”来谈谈TokuDB的row-lock和range-lock。 表t:
row-lock
从tokudb_locks表可以查询到,生成了3条row-lock(locks_key_left和locks_key_right相等)。 为了存储和显示方便,locks_key_left/locks_key_right取key的hash值。
range-lock
从tokudb_locks表可以查询到,where条件的rang-lock区间为[-infinity, ff64000000],只要其他事务的锁区间跟这个有任何重叠,则需要等待。
锁冲突
client1执行如下操作:
client2执行如下操作:
总结
在使用TokuDB过程中,如果show processlist里有锁等待语句,可以通过tokudb_locks表获取到当前所有事务的锁信息,以快速定位到问题。 TokuDB提供tokudb_lock_timeout_debug参数,可以设置不同值(默认值为1)来记录锁冲突信息,说明如下: