MySQL 核心模块揭秘 | 19 期 | 锁模块里有什么?什么样?

MySQL 核心模块揭秘 | 19 期 | 锁模块里有什么?什么样?-1


MySQL 核心模块揭秘 | 19 期 | 锁模块里有什么?什么样?-每日运维

本文基于 MySQL 8.0.32 源码,存储引擎为 InnoDB。

目录

  • 1. 引言

  • 2. 锁模块结构

    • 2.1 谁来管理行锁结构?

    • 2.2 谁来保护表锁和行锁结构?

    • 2.3 锁等待了怎么办?

    • 2.4 那就发个锁等待通知

  • 3. 总结

正文

1. 引言

前面三篇文章,我们分别介绍了 InnoDB 表锁、行锁,以及它们的锁结构。

表锁结构和行锁结构是锁模块的基础组成部分,它们就像一块砖,哪里需要哪里搬。

然而,要盖房子,光有砖不行,还得有钢筋、水泥等材料,这些材料就由锁模块结构提供。

锁模块结构只有一个对象(lock_sys
),在 InnoDB 中是全局唯一的。

2. 锁模块结构

锁模块结构类型为 lock_sys_t
,去掉注释以及两个无关紧要的属性之后,简化如下:

struct lock_sys_t {<br>  locksys::Latches latches;<br>  hash_table_t *rec_hash;<br>  hash_table_t *prdt_hash;<br>  hash_table_t *prdt_page_hash;<br>  Lock_mutex wait_mutex;<br>  srv_slot_t *waiting_threads;<br>  srv_slot_t *last_slot;<br>  bool rollback_complete;<br>  std::chrono::steady_clock::duration n_lock_max_wait_time;<br>  os_event_t timeout_event;<br>}<br>