InnoDB(七)-锁
参考文献
- MySQL技术内幕 InnoDB存储引擎
- https://dev.mysql.com/doc/refman/8.0/en/show-engine.html
锁
lock与latch
-
latch一般称为闩锁(轻量级的锁),因为其要求锁定的时间必须非常短.若持续的时间长,则应用的性能会非常差.在InnoDB存储引擎中,latch又可以分为
mutex
(互斥量)和rwlock
(读写锁).其目的是用来保证线程操作临界资源的正确性,并且通常没有死锁检测的机制. -
lock的对象是事务,用来锁定的是数据库中的对象,如表,页,行.并且一般lock的对象仅在事务
commit
或rollback
后进行释放(不同事务隔离级别释放的时间可能不同).lock在大多数数据库中一样,有死锁机制.
lock与latch不同点
lock | latch | |
---|---|---|
对象 | 事务 | 线程 |
保护 | 数据库内容 | 内存数据结构 |
持续时间 | 整个事务过程 | 临界资源 |
模式 | 行锁,表锁,意向锁 | 读写锁,互斥量 |
死锁 | 通过waits-for graph ,time out 等机制进行死锁检测 |
无死锁检测与处理机制,仅通过应用程序加锁的顺序(lock leveling)保证无死锁的情况发生 |
存在于 | Lock Manager的哈希表中 | 每个数据结构的对象中 |
-
对于InnoDB存储引擎中的latch,可以通过
SHOW ENGINE INNODB MUTEX
进行查看1
2
3
4
5
6
7
8mysql> show engine innodb mutex;
+--------+----------------------------+---------+
| Type | Name | Status |
+--------+----------------------------+---------+
| InnoDB | rwlock: fil0fil.cc:3333 | waits=5 |
| InnoDB | sum rwlock: buf0buf.cc:788 | waits=9 |
+--------+----------------------------+---------+
2 rows in set (0.01 sec)
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 HoleLin's Blog!