数据库锁的排查方式
锁的类型
InnoDB存储引擎实现了如下两种标准的行级锁:
共享锁(S Lock),允许事务读一行数据。
排他锁(X Lock),允许事务删除或更新一行数据。
为了支持在不同粒度上进行加锁操作,InnoDB存储引擎支持一种额外的锁方式,称之为意向锁(Intention Lock)。其意向锁即为表级别的锁。其支持两种意向锁:
意向共享锁(IS Lock),事务想要获得一张表中某几行的共享锁
意向排他锁(IX Lock),事务想要获得一张表中某几行的排他锁
锁问题排查
从InnoDB1.0开始,在INFORMATION_SCHEMA架构下添加了表INNODB_TRX、INNODB_LOCKS、INNODB_LOCK_WAITS
需要排查锁问题时,从这3个表下手
INNODB_TRX:事物相关信息
INNODB_LOCKS:锁相关信息
INNODB_LOCK_WAITS:未获得锁,其他事务正占用锁中,等待其锁的释放
其中各表结构及示例讲解详见《MySQL技术内幕:InnoDB存储引擎(第2版)》6.3.1小节
一致性非锁定读
在事务隔离级别READ COMMITTED
和REPEATABLE READ
(InnoDB存储引擎的默认事务隔离级别)下,InnoDB存储引擎使用非锁定的一致性读。然而,对于快照数据的定义却不相同。
在READCOMMITTED
事务隔离级别下,对于快照数据,非一致性读总是读取被锁定行的最新一份快照数据。
而在REPEATABLE READ
事务隔离级别下,对于快照数据,非一致性读总是读取事务开始时的行数据版本。
Last updated
Was this helpful?