()mysql中的InnoDB锁
1、事务的隔离级别
2、InnoDB锁争用
SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。3、innodb锁
【3.1】innodb的行锁模式及加锁方法
其实,默认情况下,mysql 的 select 查询是不会加任何锁的,其他的CDU,都会先IX,再加上X锁
【3.2】innodb行锁实现方式
mysql的行锁是针对索引来加锁的~!
(1)在不通过索引条件查询时,走全表扫了,则innodb会锁定表中的所有记录
(2)mysql是通过索引加锁的,不是针对记录,如果索引值相同有多条记录,那么会被一并锁住。
(3)当表有多个索引的时候,不同的事务可以通过不同索引锁定不同的行,无论是使用主键索引、唯一索引或普通索引,innodb都会使用行锁对数据加锁。
(4)即使在条件中加了索引,但如果执行计划没有走索引,走的是全表扫,还是会全部上锁。
1、事务的隔离级别
2、InnoDB锁争用
【2.1】行锁查看:show status like 'innodb_row_lock'
如果锁争用比较高,比如 Innodb_row_lock_time 与 Innodb_row_lock_time_avg 比较高,可以查看【2.2】
【2.2】查看当前锁情况:select * from information_schema.innodb_locks \G
查看当前锁等待情况:select * from information_schema.innodb_lock_waits \G
【2.3】使用innodb_monitors来查看innodb情况
show engine innodb status \G
3、innodb锁
【3.1】innodb的行锁模式及加锁方法
其实,默认情况下,mysql 的 select 查询是不会加任何锁的,其他的CDU,都会先IX,再加上X锁
【3.2】innodb行锁实现方式
mysql的行锁是针对索引来加锁的~!
(1)在不通过索引条件查询时,走全表扫了,则innodb会锁定表中的所有记录
(2)mysql是通过索引加锁的,不是针对记录,如果索引值相同有多条记录,那么会被一并锁住。
比如id列有索引,name列没有索引。
(3)当表有多个索引的时候,不同的事务可以通过不同索引锁定不同的行,无论是使用主键索引、唯一索引或普通索引,innodb都会使用行锁对数据加锁。
(4)即使在条件中加了索引,但如果执行计划没有走索引,走的是全表扫,还是会全部上锁。
【3.3】next-key锁
