InnoDB学习笔记--锁

文章目录

    • 1. InnoDB的锁
    • 2. latch锁
      • 2.1. mutex latch
      • 2.2. rw latch
    • 3. lock锁
      • 3.1. 读锁
      • 3.2. 写锁
      • 3.3. 意向锁
      • 3.4. 记录锁
      • 3.5. 间隙锁
      • 3.6. next-key 锁
      • 3.7. 插入意向锁
      • 3.8. 外键导致的加锁
      • 3.9 查看锁的类型

1. InnoDB的锁

​ 锁是数据库系统区别与文件系统的一个关键特性。锁机制用于管理对共享资源的并发访问。Innodb存储引擎在会有行锁和表锁。但是Innodb也会在多个地方使用锁,从而允许多种不同资源提供并发访问。

在数据库中,lock与latch都可以被称为“锁”,但是两者有着截然不同的含义

  • latch一般称为闩锁(轻量级的锁),因为 其要求锁定的时间 必须非常短。在InnoDB存储引擎中,latch又可以分为 mutex(互斥量)和 rwlock(读写锁)。其目的 是用来 保证 并发线程 操作临界资源 的 正确性,并且通常没有死锁检测的机制
  • lock的对象 是 事务,用来锁定的是 数据库中的 对象,如表、页、行。并且 一般lock的对象 仅在 事务commit或rollback后进行释放,不同事务隔离级别 释放的时间 可能不同。此外,lock,正如在大多数数据库中一样,是有死锁机制的
~ loCK latch
对象 事务 线程
保护 数据库内容 内存数据结构
持续时间 整个事务过程 内存临界资源
模式 行锁、表锁、意向锁 读写锁、互斥量
死锁 通过waits for graph、time out等机制进行死锁检测与处理 无死锁检测与处理机制、仅通过应用程序加锁的顺序保证五四所情况发生
存在 lock manager 的哈希表 每个数据结构的对象中
查看方式 SHOW ENGINE INNODB STATUS; SHOW ENGINE INNODB MUTEX;

InnoDB学习笔记--锁_第1张图片

2. latch锁

​ 在InnoDB中读写数据是需要使用buffer pool 的。而操作缓冲池中的LRU列表,删除、添加、移动LRU列表中的元素,为了保证一致性,必须有锁的介入,这就是latch锁。

你可能感兴趣的:(mysql,InnoDB,锁,Latch锁,事务锁LOCK,InnoDB关键特性)