简介

TokuDB使用LockTree(ft-index/locktree)来维护事务的锁状态(row-lockrange-lock),LockTree的数据结构是一个Binary Tree。 本篇将通过几个“栗子”来谈谈TokuDB的row-lock和range-lock。 表t:
TokuDB特性分析-行锁(row-lock)与区间锁(range-lock)

row-lock

TokuDB特性分析-行锁(row-lock)与区间锁(range-lock)
TokuDB特性分析-行锁(row-lock)与区间锁(range-lock)

从tokudb_locks表可以查询到,生成了3条row-lock(locks_key_left和locks_key_right相等)。 为了存储和显示方便,locks_key_left/locks_key_right取key的hash值。

range-lock

TokuDB特性分析-行锁(row-lock)与区间锁(range-lock)

从tokudb_locks表可以查询到,where条件的rang-lock区间为[-infinity, ff64000000],只要其他事务的锁区间跟这个有任何重叠,则需要等待。

锁冲突

client1执行如下操作:
TokuDB特性分析-行锁(row-lock)与区间锁(range-lock)
TokuDB特性分析-行锁(row-lock)与区间锁(range-lock)

client2执行如下操作:
TokuDB特性分析-行锁(row-lock)与区间锁(range-lock)
TokuDB特性分析-行锁(row-lock)与区间锁(range-lock)
TokuDB特性分析-行锁(row-lock)与区间锁(range-lock)

总结

在使用TokuDB过程中,如果show processlist里有锁等待语句,可以通过tokudb_locks表获取到当前所有事务的锁信息,以快速定位到问题。 TokuDB提供tokudb_lock_timeout_debug参数,可以设置不同值(默认值为1)来记录锁冲突信息,说明如下:
TokuDB特性分析-行锁(row-lock)与区间锁(range-lock)

发表评论

电子邮件地址不会被公开。 必填项已用*标注