美文网首页
锁的算法

锁的算法

作者: lsh的学习笔记 | 来源:发表于2020-05-06 18:47 被阅读0次

InnoDB的3种行锁算法

注意:这里说的是行锁,不是表锁,且这里讨论的是 InnoDB 引擎。

3种锁算法
  • Record Lock:单个行记录上的锁。
  • Gap Lock:间隙锁,锁定一个范围,但不包含记录本身。
  • Next-Key Lock:Gap Lock + Record Lock,锁定一个范围,并且锁定记录本身。

Record Lock

总是锁住索引记录。如果表创建时没有设置主键索引,会使用隐式主键锁定

Gap Lock

作用:阻止多个事务将记录插入到同一范围内,导致幻读。

关闭 Gap Lock

  1. 将事务隔离级别设为 Read Commit。
  2. 将参数innodb_locks_unsafe_for_binlog设为1。

不建议这样设置,因为这破坏了事务的隔离性,并且对主从复制,可能导致主从数据不一致。而且性能不会优于可重复读。

Next-Key Lock

InnoDB对于查询都是采用这种锁定算法。

设计目的:解决幻读。

锁定的不是单个值,而是一个范围。

当查询的索引含有唯一属性时,会降级为Record Lock,即仅锁住索引本身,而不是范围。

相关文章

  • 无锁算法——CAS原理

    一、无锁算法 CAS(比较与交换,Compare and swap) 是一种有名的无锁算法。无锁编程,即不使用锁的...

  • 乐观锁和悲观锁

    最近在看无锁结构/非阻塞算法,相比与有锁结构/阻塞算法,其区别可以用乐观和悲观锁简要的概况一下 有锁结构/阻塞算法...

  • MySQL中innodb的行锁算法

    众所周知,innodb是默认行锁,当然也支持表锁。如下是对于行锁的算法进行的一些实验。 锁的算法为:我知道是行锁,...

  • 自旋锁

    简单回顾一下CAS算法 CAS算法即compare and swap(比较与交换),是一种有名的无锁算法。无锁编程...

  • Java并发编程之并发容器 CopyOnWrite,Concur

    前言 JUC 高并发容器是基于非阻塞算法(或者无锁编程算法)实现的容器类,无锁编程(Lock Free)算法主要通...

  • 锁的算法

    InnoDB的3种行锁算法 注意:这里说的是行锁,不是表锁,且这里讨论的是 InnoDB 引擎。 Record L...

  • 面试必备之深入理解自旋锁

    1、自旋锁 简单回顾一下CAS算法CAS算法 即compare and swap(比较与交换),是一种有名的无锁算...

  • Concurrency Control 算法分类

    Concurrency Control 算法分类 TwoPhaseLocking 悲观算法,访问资源必须获取一把锁...

  • CAS算法

    1. CAS算法 比较与交换(compare and swap),是一种无锁算法,即不使用锁的情况下实现多线程之间...

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

    InnoDB存储引擎的锁的算法有三种: Record lock:单个行记录上的锁 Gap lock:间隙锁,锁定一...

网友评论

      本文标题:锁的算法

      本文链接:https://www.haomeiwen.com/subject/ltqgghtx.html