server层与引擎层
server层做了⼀些查询优化、分析,还有存储过程、触发器、视图等。 引擎层负责数据得存储和提取。
锁粒度
1. ⾏锁
2. 表锁
事务
⼀组原⼦性操作,要么全部成功,要么全部失败。ACID,原⼦性、⼀致性、隔离性、持久性。
隔离级别
1. 未提交读
2. 已提交读
3. 可重复读
4. 串⾏化
死锁
死锁就是多个事务相互占⽤同⼀资源,请求保持资源不释放,导致恶性循环。innodb的⽅式就是讲持有最少⾏级排他锁的事务进⾏回滚。
事务⽇志
WAL(
write-ahead-logging)预先写⼊⽇志。
隐式锁定和显示锁定
锁在commit和rollback时释放。使⽤ in share mode,和for update 表示当前读,读最新的值。
多版本并发控制(MVCC)
处于并发的考虑,实现了mvcc机制减少了加锁的操作。通过保存数据在某个时间点的快照实现的。mvcc有乐观和悲观类型。
每⼀⾏数据都有版本号,在innodb的操作中,事务只会看到能看到的数据版本。也就是MySQL45讲中提出的⾼低⽔位,判断事务是否符合⾼低⽔位的范围。
这样可以使的多数读操作不⽤加锁,提⾼性能。mvcc只在RR、RC级别⼯作,因为RU读最新数据,串⾏化对所有读取⾏加锁。
MySQL的存储引擎
使⽤show table status like '表的名字' 查看表的结构
innodb⽀持事务,采⽤mvcc机制,实现了四个隔离级别。
myisam不⽀持⾏级锁与事务,崩溃后⽆法恢复,数据和索引分开。⽀持表级锁,可以执⾏修复,不⽀持blob和text等⻓字段。
原⼦DDL
要么修改全部完成,要么全部失败。