MySQL逻辑架构

MySQL逻辑架构

并发控制

这里只针对服务器层与存储引擎层的并发控制

读写锁

  • 共享锁,又称读锁,读锁是共享的,多个客户同时读取统一资源互不干扰
  • 排他锁,又称写锁,写锁是排他的,一个客户获取写锁则会阻塞其他客户的读锁和写锁

锁粒度

获取锁、检查锁是否解除、释放锁都会占用系统资源,增加系统开销。所谓合适的锁粒度,就是在锁的开销和数据的安全性之间寻找平衡

  • 表锁,MySQL中最基本的锁策略,会锁定整张表,开销最小。用户在对表进行写操作前,需要先获得写锁,这会阻塞其他用户对该表的读写操作

  • 行级锁,最大程度地支持并发处理(同时也带来了最大的锁开销)。行级锁是在存储引擎层实现,而MySQL服务层没有实现

事务

  • 原子性(atomicity)

    一个事务为一个不可分割的最小单元,要么全部提交成功,要么全部失败回滚

  • 一致性(consistency)
    数据库总是从一个一致性的状态转换到另外一个一致性的状态。

  • 隔离型(isolation)
    两个不同事务互不干扰

  • 持久性
    事务一旦提交,对数据的修改是永久性的

隔离级别

隔离级别 脏读可能性 不可重复读可能性 幻读可能性 加锁读
READ UNCOMMITTED(读未提交) yes yes yes no
READ COMMITTED(读已提交) no yes yes no
REPEATABLE READ(可重复读),MySQL默认隔离级别 no no yes no
SERIALIZABLE(可串性化) no no no Yes

死锁

死锁是指两个或者多个事务在统一资源上相互占用,并请求锁定对方占用的资源,从而导致恶性循环的现象。

死锁发生后,只有部分或者完全回滚其中一个事务,才能打破死锁。