MySQL[0]-存储引擎前置
逻辑架构
- 顶层客户端负责连接处理、授权验证、安全等等。每一个连接都需要一个线程进行管理。这些线程是通过线程池维护的。
- 中间层负责解析查询,包括重写查询、决定表的读取顺序、选择合适的索引。对于SELECT查询语句,服务器会先查询缓存,如果存在则直接返回结果而不去在进行SQL解析等后续步骤。
- 底层存储引擎负责数据的读取与存储。存储引擎不会解析SQL只响应上层服务请求。
并发控制
- 读写锁
- 锁粒度
- 表锁
- 行锁
事务
- 事务隔离级别
死锁
死锁描述的是在两个或以上线程个占有一个资源,并相互请求对方资源的情况。这是由于不同线程对资源请求顺序不一致导致的,这时必须通过外力作用才能解除。
在MySQL中可以表现为两个或多个事务在各自持有一行数据锁时,并请求彼此一行数据的情况。为此MySQL实现了各种死锁检测机制以及死锁超时机制。比如Innodb检查到死锁依赖会立即返回错误。并将持有最小行级排他锁事务进行回滚。
事务日志
通过修改内存拷贝追加事务日志来提升事务效率,在后台再慢慢写入磁盘。
事务中的混合存储引擎
事务回滚是不会回滚非事务支持的表的(比如MyISAM引擎的表)
多版本并发控制(MVCC)
类比 JAVA 的 CAS 操作