锁机制用于管理对共享资源的并发访问,不同的数据库虽然有相同的SQL,但却设计了不同的锁。InnoDB的锁提供了一致性的非锁定读、行级锁支持
lock & latch
latch主要分为mutex和rwlock,用来保证并发线程操作临界资源的正确性,用来保护内存中的数据结构,没有死锁检测机制,这种锁更像是之前在CSAPP中学的锁
lock的对象则是事务,用来锁定数据库的表、页和行
简介
InnoDB中实现了两种行级锁
- S lock:允许事务读取一行数据
- X lock:允许事务删除或更新一行数据
上面两种锁,很像CSAPP中提到的读者-写者模型,也就是读写锁
InnoDB也支持不同粒度的锁,但不是特定粒度的锁,而是一种叫做Intention Lock(意向锁),要对记录上锁,就要将对应的页、表和数据库上意向锁。意向锁其实是表级别的锁,又分为
- IS lock:事务想要获取表中某几行的S lock
- IX lock:事务想要获取表中某几行的X lock
可以通过mysql> desc information_schema.INNODB_xxx;
查看INNODB_TRX
(事务的状态信息) INNODB_LOCKS
(锁的状态) INNODB_LOCK_WAITS
(反应事务请求和等待锁的状态)三张表的结构