逻辑架构

MySQL 逻辑架构MySQL 逻辑架构

  • 顶层客户端负责连接处理、授权验证、安全等等。每一个连接都需要一个线程进行管理。这些线程是通过线程池维护的。
  • 中间层负责解析查询,包括重写查询、决定表的读取顺序、选择合适的索引。对于SELECT查询语句,服务器会先查询缓存,如果存在则直接返回结果而不去在进行SQL解析等后续步骤。
  • 底层存储引擎负责数据的读取与存储。存储引擎不会解析SQL只响应上层服务请求。

并发控制

  • 读写锁
  • 锁粒度
    • 表锁
    • 行锁

事务

  • 事务隔离级别

死锁

死锁描述的是在两个或以上线程个占有一个资源,并相互请求对方资源的情况。这是由于不同线程对资源请求顺序不一致导致的,这时必须通过外力作用才能解除。

在MySQL中可以表现为两个或多个事务在各自持有一行数据锁时,并请求彼此一行数据的情况。为此MySQL实现了各种死锁检测机制以及死锁超时机制。比如Innodb检查到死锁依赖会立即返回错误。并将持有最小行级排他锁事务进行回滚。

事务日志

通过修改内存拷贝追加事务日志来提升事务效率,在后台再慢慢写入磁盘。

事务中的混合存储引擎

事务回滚是不会回滚非事务支持的表的(比如MyISAM引擎的表)

多版本并发控制(MVCC)

类比 JAVA 的 CAS 操作