MYSQL 锁理解
LOCK LEVEL
GLOBAL
由Server层实现,所有存储引擎都可使用,
全局锁就是对整个数据库实例加锁。
Flush tables with read lock;
FTWRL
DATABASE
TABLE
只读 所有线程对整张表就只能读不能写
写锁
锁的持有者可以读写表,其他线程不能读也不能
写
自增
innodb_autoinc_lock_mode
0 表锁
1 轻量锁 INSERT SELECT 表锁
2 轻量锁
意向 加行锁前,在表加意向锁,解决其它想加表锁的性能
元数据
DML 读
DDL 写 MDL前有长时间事务时,MDL会阻塞后面的事务
PAGE
位图管理行锁信息,占用30-100字节
INDEX
二级索引
唯一索引
普通索引
一级索引 主键&聚集索引
内存
latch
mutex
隔离级别
RC
解决读脏读取其它事务正在修改的数据
RR
解决幻读两次读取,记录数不一样
解决重复读异常两次读取,记录内容不一样
SEARCH RANGE
等值=
存在
不存在
单边范围 >
双边范围 < >
LOCK VISIBLE
显示
隐式
LOCK MODE
X 独占
S 共享
I 意向
LOCK TYPE
NEXT-KEY 临键
(1,3]
GAP 间隙
(1,3)
Record 记录
[3]
评论