《高性能mysql》第一篇

tip:本篇是基于《高性能mysql第三版》总结出的笔记类博文,只作为个人学习的记录,若有机会,还是希望大家能实际去阅读该书。

Mysql服务器逻辑架构图如下所示:
在这里插入图片描述

  1. 排他锁(X锁),也叫写锁
  2. 共享锁(S锁),也叫读锁
  3. 锁粒度: 在给定的资源上,锁定的数据越少,则系统的并发性越高.
    表级锁:开销最小的策略,锁粒度较大,服务器会为诸如ALTER TABLE之类的语句使用表级锁,而忽略存储引擎的锁机制.
    行级锁:最大程度支持并发处理,同时也带来了最大的锁开销(InnodeDB).
  4. 事务:
    ACID,即原子性,一致性,持久性,隔离性.
    隔离级别:
    4.1. Read Uncommitted(未提交读);
    4.2. Read Committed(提交读,有些版本也叫”不可重复读”),绝大多数数据库使用的隔离级别,但Mysql不是;
    4.3. Repeatable Read(可重复读,mysql的默认隔离级别)
    4.4. Serializable(可串行化,最高的隔离级别)
    [外链图片转存失败(img-cP0Y2jbn-1563632348043)
    在这里插入图片描述
  5. 死锁
    在这里插入图片描述
    InnodeDB处理死锁的方式:将持有最少行级排他锁的事务进行回滚(这是比较简单的死锁回滚算法),对于死锁,大多数情况下只需要重新执行因死锁回滚的事务即可.
  6. 多版本并发控制(MVVC): MVVC是行级锁的一个变种,他在很多情况下避免了加锁操作,实现了非阻塞式读操作,写操作也只是锁定必要的行,因此开销更低.MVVC的实现,是通过保存数据在某个时间点的快照来实现.也就是说,不管执行多长时间,每个事务看到的数据是一致的.根据事务的开始时间不同,每个事务对于同一张表,同一时刻看到的数据可能是不一样的.
    InnoDb的MVCC:是通过在每行记录后面保存两个隐藏的列来实现的.这两个列,一个保存了行的创建时间,一个保存了行的过期时间(或删除时间).当然存储的并不是实际的时间值,而是系统的版本号.每开启一个新的事务,系统版本号都会自动递增.
    MVVC目前只在Read Committed与Repeatable Read两个隔离级别下工作.其他两个级别都与MVVC不兼容, Read Uncommitted总是读取最新的数据行,而不符合当前事务版本的数据行, Serializable则会对所有读取的行都加锁.
  7. InnoDB存储引擎: InnoDB采用MVCC来支持高并发,并且实现了四个级别的隔离标准,默认级别是Repeatable Read(可重复读),并且通过间隙锁(next-key locking)策略防止幻读的出现.间隙锁使得InnoDB不仅仅锁定查询涉及的行,还会对索引中的间隙进行锁定,防止幻影行的插入.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值