专栏首页happyJared锁机制与 InnoDB 锁算法

锁机制与 InnoDB 锁算法

MyISAM 和 InnoDB 存储引擎使用的锁:

  • MyISAM 采用表级锁(table-level locking)。
  • InnoDB 支持行级锁(row-level locking)和表级锁,默认为行级锁

表级锁和行级锁对比:

  • 表级锁: MySQL 中锁定 粒度最大 的一种锁,对当前操作的整张表加锁,实现简单,资源消耗也比较少,加锁快,不会出现死锁。其锁定粒度最大,触发锁冲突的概率最高,并发度最低,MyISAM 和 InnoDB 引擎都支持表级锁;
  • 行级锁: MySQL 中锁定 粒度最小 的一种锁,只针对当前操作的行进行加锁。 行级锁能大大减少数据库操作的冲突。其加锁粒度最小,并发度高,但加锁的开销也最大,加锁慢,会出现死锁。

可以参考: MySQL锁机制简单了解一下

InnoDB 存储引擎的锁的算法有三种:

  • Record lock:单个行记录上的锁
  • Gap lock:间隙锁,锁定一个范围,不包括记录本身
  • Next-key lock:record+gap 锁定一个范围,包含记录本身

知识点:

  1. InnoDB 对于行的查询使用 next-key lock
  2. Next-locking keying 是为了解决 Phantom Problem 幻读问题
  3. 当查询的索引含有唯一属性时,将 next-key lock 降级为 record key
  4. Gap 锁设计的目的,是为了阻止多个事务将记录插入到同一范围内,而这会导致幻读问题的产生
  5. 有两种方式显式关闭 gap 锁: A. 将事务隔离级别设置为 RC; B. 将参数 innodb_locks_unsafe_for_binlog 设置为1(除了外键约束和唯一性检查外,其余情况仅使用 record lock)

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Linux私房菜:vi与vim编辑器

    vim还支持同时打开多个文件,用于跨文件操作:vim file1 file2 file*

    happyJared
  • 高可用系统的常用设计手段

    1. 降级: 服务降级是当服务器压力剧增的情况下,根据当前业务情况及流量对一些服务和页面进行有策略的降级,以此释放服务器资源来保证核心任务的正常运行。降级往往会...

    happyJared
  • 多线程系列问题汇总

    多线程编程中,一般线程的个数都大于 CPU 的核心个数,而一个 CPU 核心在任意时刻只能被一个线程使用,为了让这些线程都能得到有效的执行,通常 CPU 采取的...

    happyJared
  • 编程工具 | PyCharm 2018.1.4 安装教程

    课代表
  • 微课|中学生可以这样学Python(例7.1):继承

    Python小屋屋主
  • Java集合--ConcurrentMap

    贾博岩
  • 使用Jmeter录制脚本并调试

    jmeter技术研究
  • 神经网络并不是尚方宝剑,我们需要正视深度 NLP 模型的泛化问题

    AI 科技评论按:前段时间的文章《顶会见闻系列:ACL 2018,在更具挑战的环境下理解数据表征及方法评价》中,我们介绍了 ACL 大会上展现出的 NLP 领域...

    AI科技评论
  • Python3.9又更新了:dict内置新功能,正式版十月见面

    自公开了 3.8 版本后,Python 的迭代依然在继续。目前是 Python3.9,这是一个正在开发的 Python 版本。其最新的 alpha 4.0 版本...

    机器之心
  • Python3.9又更新了:dict内置新功能,正式版十月见面

    自公开了 3.8 版本后,Python 的迭代依然在继续。目前是 Python3.9,这是一个正在开发的 Python 版本。其最新的 alpha 4.0 版本...

    昱良

扫码关注云+社区

领取腾讯云代金券