show status like 'table%';
-- Table_locks_immediate: 产生表级锁定的次数,表示可以立即获取锁的查询次数,每立即获取锁值加1
-- Table_locks_waited: 出现表级锁定争用而发生等待的次数(不能立即获取锁的次数,每等待一次锁值加1),此值越高说明存在着较严重的表级锁争用情况。
用范围条件而不是相等条件检索数据,并请求共享或排它锁时,InnoDB会给符合条件的已有数据记录的索引项加锁,对于键值在条件范围内但并不存在的记录,叫做间隙(GAP)。InnoDB也会对这个间隙加锁,这种锁机制就是间隙锁。例如:范围a>1 and a<6,其中a不存在2这个值。
语句执行过程中通过范围查找用到行锁的话,InnoDB会锁定整个范围内所有的索引键值,即使这个键值不存在。
锁定一行
select xxx[,xxx...] for update;
行锁分析
show status like 'innodb_row_lock%';
-- innodb_row_lock_current_waits: 当前正在等待锁定的数量
-- innodb_row_lock_time: 系统启动到现在锁定总时间长度
-- innodb_row_lock_time_max: 系统启动到现在等待最长的一次所花费的时间
-- innodb_row_lock_waits: 系统启动到现在总共等待的次数