第1章 MySQL架构
本章是高性能MySQL的开篇,主要介绍了MySQL数据库包含的几个部分。其中读者需要关注的点整理如下:
- 需要关注MySQL的一个逻辑架构,从这个图中,我们可以了解到MySQL服务器和存储引擎是一个解耦的架构
- 介绍如何用锁进行并发控制,例如行锁,表锁,读写锁等不同的锁力度。而且也说明了锁的实现是在存储引擎层面而不是MySQL服务器层面。
- 介绍了下事务的概念,并对事务ACID的四大特性逐一进行了讲解
- 对事务的隔离级别进行了介绍,并指出各种隔离级别下存在的一些问题
- 存储引擎是驱动如何从硬盘中存储和检索数据的软件
- 注意
select ... for update语句是会对查询加上锁的 - MVCC的工作原理是使用数据在某个时间点的快照实现的
- 跨不同事务处理同一行多个版本的序列图
- MVCC通过在行记录上多存储一些额外信息,使得大多数读取查询都不需要获取锁(读取快照),但带来的确定就是在检查行时需要做更多的工作
- InnoDB默认为REPEATABLE READ隔离级别,并且通过间隙锁(next-key locking)策略来防止在这个隔离级别上的幻读:InnoDB不只锁定在查询中涉及的行,还会对索引结构中的间隙进行锁定,以防止幻行被插入。不过,这里也需要注意一点,MVCC并未完全解决幻读的问题。例如先快照读,再进行当前读,依然可以发生幻读。
第2章 可靠性工程世界中的监控
本章的知识点初看是比较的零碎的,但在多次阅读后还是能找到一条主线的。该主线讲述的内容如下,为了监测数据库的可用性,我们应该定义相应的SLI(可用性指标)和SLO(可用性目标)。而定义SLI和SLO时,我们也需要根据功能的不同,进行不同的定义。
在确定上述主旨后,接下来主要讲述了应该监控哪些内容。例如监控数据库的可用性,监控查询延迟,监控数据库的报错。
此外为了更好的跟踪服务的运行状态,我们还需要监控磁盘使用率的增长,连接数的增长,复制延迟,I/O使用率,创建备份/恢复时间等指标。