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、事务的隔离级别

  ()mysql中的InnoDB锁 随笔 第1张

 

2、InnoDB锁争用

【2.1】行锁查看:show status like 'innodb_row_lock'

  ()mysql中的InnoDB锁 随笔 第2张

  如果锁争用比较高,比如 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

 

  ()mysql中的InnoDB锁 随笔 第3张

 

3、innodb锁

【3.1】innodb的行锁模式及加锁方法 

 其实,默认情况下,mysql 的 select 查询是不会加任何锁的,其他的CDU,都会先IX,再加上X锁

  ()mysql中的InnoDB锁 随笔 第4张

    ()mysql中的InnoDB锁 随笔 第5张

 

 【3.2】innodb行锁实现方式

  mysql的行锁是针对索引来加锁的~!

  ()mysql中的InnoDB锁 随笔 第6张

  (1)在不通过索引条件查询时,走全表扫了,则innodb会锁定表中的所有记录

    ()mysql中的InnoDB锁 随笔 第7张

   (2)mysql是通过索引加锁的,不是针对记录,如果索引值相同有多条记录,那么会被一并锁住。

    比如id列有索引,name列没有索引。

    ()mysql中的InnoDB锁 随笔 第8张

  (3)当表有多个索引的时候,不同的事务可以通过不同索引锁定不同的行,无论是使用主键索引、唯一索引或普通索引,innodb都会使用行锁对数据加锁。

  (4)即使在条件中加了索引,但如果执行计划没有走索引,走的是全表扫,还是会全部上锁。

 

【3.3】next-key锁

  ()mysql中的InnoDB锁 随笔 第9张

  ()mysql中的InnoDB锁 随笔 第10张

  ()mysql中的InnoDB锁 随笔 第11张

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄