MySQL 核心模块揭秘 | 18 期 | 锁在内存里长什么样?
本文基于 MySQL 8.0.32 源码,存储引擎为 InnoDB。
目录
1. 共用的结构
2. type_mode
3. 表锁结构
4. 行锁结构
4.1 有名有姓的那些属性
4.2 隐姓埋名的内存区域
4.3 共用行锁结构的两个问题
5. 总结
正文
1. 共用的结构
InnoDB 的表锁结构和行锁结构,有一些共同属性,也有一些不同属性。
因为有共同属性,表锁结构和行锁结构都使用结构体 lock_t
来表示锁结构。
在 lock_t 之下,又定义了 lock_table_t
、lock_rec_t
分别包含表锁结构和行锁结构的不同属性。
为了更直观的理解表锁结构和行锁结构,我们去掉 lock_t
的一些非核心信息之后,整理如下:
// storage/innobase/include/lock0priv.h<br>struct lock_t {<br> trx_t *trx;<br> UT_LIST_NODE_T(lock_t) trx_locks;<br> dict_index_t *index;<br> lock_t *hash;<br> union {<br> lock_table_t tab_lock;<br> lock_rec_t rec_lock;<br> };<br> uint32_t type_mode;<br>};<br>