Mysql锁机制 4

概述

  1. 定义
  • image.png
  1. 生活购物
  • image.png
  1. 锁的分类
    • 从对数据操作的类型(读/写)分离
      • 读锁(共享锁):针对同一份数据,多个读操作可以同时进行,而不会相互影响。
      • 写锁(排它锁):当前写操作没有完成,它会阻断其他写锁或读锁。
    • 从对数据操作的粒度分为
      • 表锁
      • 行锁

三锁(表、行、页)

  • 开销、加锁的速度、死锁、粒度、并发性能(具体应用/业务分析合适的锁)

表锁(偏读)

  1. 特点
    • 偏向MyISAM存储引擎,开销小,加锁快;无死锁;锁定粒度大,发生冲突的概率高,并发度低。
  1. 案例分析
  • 建表sql
    • image.png
  • 加读锁-   #  lock table mylock read,book write;  # mylock 是读锁,book是写锁  
    • image.png
    • image.png
    • image.png
    • case:
    • image.png
    • image.png
    • image.png
    • image.png
    • image.png
  • 加写锁
    • mylock 表添加write锁(MyIsAM存储引擎的写阻塞案例)
    • image.png
    • image.png
    • image.png
    • image.png
  1. 案例结论
  • image.png
  • image.png
  1. 表锁分析
  • image.png
  • image.png
  • image.png

行锁(偏写)

  1. 特点
  • 偏向InnoDB存储引擎,开销大,加锁慢;
  • 会出现死锁;
  • 锁定粒度最小,发生锁冲突的概率最低,并发度也最高。
  • InnoDB 和 MyISAM 的最大不同(俩点)
    • 支持事务
    • 行级锁
  1. 由于行锁支持事务,复习老的知识
  • 事务(Traction)及ACID属性
    • image.png
  • 并发事务处理带来的问题
    • 更新丢失(Lost Update)
      • image.png
    • 脏读(Dirty Reads)
      • image.png
    • 不可重复读(non-Repeatable Reads)
      • image.png
    • 幻影读(Phantom Reads)
      • image.png
  • 事务的隔离级别
    • image.png
    • image.png
  1. 案例分析
    1. 建表SQL
  • image.png
  • image.png
    1. 行锁定 基本演示
  • image.png
    1. 无索引锁升级为表锁
  • update test_innodb_lock set a=1 where b=1;
    • 如果b 是 varchar 类型的,
    • 会导致mysql 数据类型自动转换,
    • 索引失效,
    • 还会导致 mysql 从行锁升级为表锁,从而导致整个表阻塞。
    1. 间隙锁危害
  • image.png
  • image.png
    1. 面试题:如何锁定一行(常考)
  •  image.png
  • 案例结论
    • image.png
  1. 行锁分析
  • image.png
  • image.png
  • image.png
  1. 优化建议
  • image.png

页锁

  • image.png

 

 
 
posted @ 2020-06-05 10:55  菜鸟调臭虫  阅读(186)  评论(0编辑  收藏  举报