第1章 MySQL架构

依据第4版完整目录覆盖19个节点:从连接进入MySQL逻辑层,经优化器到InnoDB事务、页、日志与复制的完整请求路径

第1章 MySQL架构

本课程对应Silvia Botros、Jeremy Tinley著,宁海元、周振兴、张新铭译《高性能MySQL(第4版)》,电子工业出版社2022年9月出版,纸书344页,ISBN 9787121442575。原版High Performance MySQL: Proven Strategies for Operating at Scale由O'Reilly于2021年11月发布,386页,ISBN 9781492080503。

官方中英文目录确认第4版为13章与附录A、B。课程按15个正式单元逐项重构,不沿用第3版的14章结构,也不复制原文;另设学习地图与总复习,共17页。本页覆盖19个正式节点。

学习目标

  • 能解释“第1章 MySQL架构”的19个目录节点,并连接到“从连接进入MySQL逻辑层,经优化器到InnoDB事务、页、日志与复制的完整请求路径”主线。
  • 能复现一次事务的连接、计划、锁、版本、日志和复制事件联合轨迹,保存MySQL版本、Schema、数据量、配置、负载、预期与实际结果。
  • 能比较基线、压力与故障条件,证明“提交结果满足隔离与持久性,读视图、锁和日志边界可解释,原子DDL不留下半完成元数据”。
  • 能设计反例推翻“把MySQL当成单体SQL解释器,忽略服务层与InnoDB分工,或把MVCC误认为完全无锁”,并给出上线门、回退与独立验收条件。

从用户SLO和一次故障开始

先预测:在30天窗口内,目标请求成功率、P95与P99延迟、允许错误分钟和恢复时间各是多少?再描述本章机制如何影响这些结果。不要先看图表再给故事;先固定服务目标、MySQL版本、数据规模、并发、缓存状态和故障点,实验后才允许用证据修正模型。

本页主问题是“从连接进入MySQL逻辑层,经优化器到InnoDB事务、页、日志与复制的完整请求路径”。最终交付不是一组建议,而是一次事务的连接、计划、锁、版本、日志和复制事件联合轨迹,由另一位工程师证明:提交结果满足隔离与持久性,读视图、锁和日志边界可解释,原子DDL不留下半完成元数据

核心词汇与运行边界

构成本页词汇。每个词都要回答它改变哪个用户指标、由哪个MySQL或基础设施模块实现、在哪个压力或故障边界失效,以及用哪条独立证据发现失效。

第4版目录逐节点映射

1.1 MySQL的逻辑架构

节点合同 1/19 · 定义用户影响。 先写“1.1 MySQL的逻辑架构”影响的用户请求、MySQL状态和资源,再把它接入“从连接进入MySQL逻辑层,经优化器到InnoDB事务、页、日志与复制的完整请求路径”。上游是“本章服务目标”,下游是“1.2 连接管理与安全性”;若无法解释这条因果关系,术语记忆不能算完成。

在固定MySQL 8.0小型业务库中先预测成功率、实际扫描行、锁或版本、日志位置、资源等待和恢复终点,再只改变一个变量。用“提交结果满足隔离与持久性,读视图、锁和日志边界可解释,原子DDL不留下半完成元数据”验收正常与失败路径,并保存执行计划、Performance Schema摘要、状态变量或业务对账中真正支持结论的部分。

1.2 连接管理与安全性

节点合同 2/19 · 固定实验输入。 先写“1.2 连接管理与安全性”影响的用户请求、MySQL状态和资源,再把它接入“从连接进入MySQL逻辑层,经优化器到InnoDB事务、页、日志与复制的完整请求路径”。上游是“1.1 MySQL的逻辑架构”,下游是“1.3 优化与执行”;若无法解释这条因果关系,术语记忆不能算完成。

在固定MySQL 8.0小型业务库中先预测成功率、实际扫描行、锁或版本、日志位置、资源等待和恢复终点,再只改变一个变量。用“提交结果满足隔离与持久性,读视图、锁和日志边界可解释,原子DDL不留下半完成元数据”验收正常与失败路径,并保存执行计划、Performance Schema摘要、状态变量或业务对账中真正支持结论的部分。

1.3 优化与执行

节点合同 3/19 · 定位责任层。 先写“1.3 优化与执行”影响的用户请求、MySQL状态和资源,再把它接入“从连接进入MySQL逻辑层,经优化器到InnoDB事务、页、日志与复制的完整请求路径”。上游是“1.2 连接管理与安全性”,下游是“1.4 并发控制”;若无法解释这条因果关系,术语记忆不能算完成。

在固定MySQL 8.0小型业务库中先预测成功率、实际扫描行、锁或版本、日志位置、资源等待和恢复终点,再只改变一个变量。用“提交结果满足隔离与持久性,读视图、锁和日志边界可解释,原子DDL不留下半完成元数据”验收正常与失败路径,并保存执行计划、Performance Schema摘要、状态变量或业务对账中真正支持结论的部分。

1.4 并发控制

节点合同 4/19 · 推演正常路径。 先写“1.4 并发控制”影响的用户请求、MySQL状态和资源,再把它接入“从连接进入MySQL逻辑层,经优化器到InnoDB事务、页、日志与复制的完整请求路径”。上游是“1.3 优化与执行”,下游是“1.4.1 读写锁”;若无法解释这条因果关系,术语记忆不能算完成。

在固定MySQL 8.0小型业务库中先预测成功率、实际扫描行、锁或版本、日志位置、资源等待和恢复终点,再只改变一个变量。用“提交结果满足隔离与持久性,读视图、锁和日志边界可解释,原子DDL不留下半完成元数据”验收正常与失败路径,并保存执行计划、Performance Schema摘要、状态变量或业务对账中真正支持结论的部分。

1.4.1 读写锁

节点合同 5/19 · 注入失败条件。 先写“1.4.1 读写锁”影响的用户请求、MySQL状态和资源,再把它接入“从连接进入MySQL逻辑层,经优化器到InnoDB事务、页、日志与复制的完整请求路径”。上游是“1.4 并发控制”,下游是“1.4.2 锁的粒度”;若无法解释这条因果关系,术语记忆不能算完成。

在固定MySQL 8.0小型业务库中先预测成功率、实际扫描行、锁或版本、日志位置、资源等待和恢复终点,再只改变一个变量。用“提交结果满足隔离与持久性,读视图、锁和日志边界可解释,原子DDL不留下半完成元数据”验收正常与失败路径,并保存执行计划、Performance Schema摘要、状态变量或业务对账中真正支持结论的部分。

1.4.2 锁的粒度

节点合同 6/19 · 收集独立证据。 先写“1.4.2 锁的粒度”影响的用户请求、MySQL状态和资源,再把它接入“从连接进入MySQL逻辑层,经优化器到InnoDB事务、页、日志与复制的完整请求路径”。上游是“1.4.1 读写锁”,下游是“1.5 事务”;若无法解释这条因果关系,术语记忆不能算完成。

在固定MySQL 8.0小型业务库中先预测成功率、实际扫描行、锁或版本、日志位置、资源等待和恢复终点,再只改变一个变量。用“提交结果满足隔离与持久性,读视图、锁和日志边界可解释,原子DDL不留下半完成元数据”验收正常与失败路径,并保存执行计划、Performance Schema摘要、状态变量或业务对账中真正支持结论的部分。

1.5 事务

节点合同 7/19 · 定义用户影响。 先写“1.5 事务”影响的用户请求、MySQL状态和资源,再把它接入“从连接进入MySQL逻辑层,经优化器到InnoDB事务、页、日志与复制的完整请求路径”。上游是“1.4.2 锁的粒度”,下游是“1.5.1 隔离级别”;若无法解释这条因果关系,术语记忆不能算完成。

在固定MySQL 8.0小型业务库中先预测成功率、实际扫描行、锁或版本、日志位置、资源等待和恢复终点,再只改变一个变量。用“提交结果满足隔离与持久性,读视图、锁和日志边界可解释,原子DDL不留下半完成元数据”验收正常与失败路径,并保存执行计划、Performance Schema摘要、状态变量或业务对账中真正支持结论的部分。

1.5.1 隔离级别

节点合同 8/19 · 固定实验输入。 先写“1.5.1 隔离级别”影响的用户请求、MySQL状态和资源,再把它接入“从连接进入MySQL逻辑层,经优化器到InnoDB事务、页、日志与复制的完整请求路径”。上游是“1.5 事务”,下游是“1.5.2 死锁”;若无法解释这条因果关系,术语记忆不能算完成。

在固定MySQL 8.0小型业务库中先预测成功率、实际扫描行、锁或版本、日志位置、资源等待和恢复终点,再只改变一个变量。用“提交结果满足隔离与持久性,读视图、锁和日志边界可解释,原子DDL不留下半完成元数据”验收正常与失败路径,并保存执行计划、Performance Schema摘要、状态变量或业务对账中真正支持结论的部分。

1.5.2 死锁

节点合同 9/19 · 定位责任层。 先写“1.5.2 死锁”影响的用户请求、MySQL状态和资源,再把它接入“从连接进入MySQL逻辑层,经优化器到InnoDB事务、页、日志与复制的完整请求路径”。上游是“1.5.1 隔离级别”,下游是“1.5.3 事务日志”;若无法解释这条因果关系,术语记忆不能算完成。

在固定MySQL 8.0小型业务库中先预测成功率、实际扫描行、锁或版本、日志位置、资源等待和恢复终点,再只改变一个变量。用“提交结果满足隔离与持久性,读视图、锁和日志边界可解释,原子DDL不留下半完成元数据”验收正常与失败路径,并保存执行计划、Performance Schema摘要、状态变量或业务对账中真正支持结论的部分。

1.5.3 事务日志

节点合同 10/19 · 推演正常路径。 先写“1.5.3 事务日志”影响的用户请求、MySQL状态和资源,再把它接入“从连接进入MySQL逻辑层,经优化器到InnoDB事务、页、日志与复制的完整请求路径”。上游是“1.5.2 死锁”,下游是“1.5.4 MySQL中的事务”;若无法解释这条因果关系,术语记忆不能算完成。

在固定MySQL 8.0小型业务库中先预测成功率、实际扫描行、锁或版本、日志位置、资源等待和恢复终点,再只改变一个变量。用“提交结果满足隔离与持久性,读视图、锁和日志边界可解释,原子DDL不留下半完成元数据”验收正常与失败路径,并保存执行计划、Performance Schema摘要、状态变量或业务对账中真正支持结论的部分。

1.5.4 MySQL中的事务

节点合同 11/19 · 注入失败条件。 先写“1.5.4 MySQL中的事务”影响的用户请求、MySQL状态和资源,再把它接入“从连接进入MySQL逻辑层,经优化器到InnoDB事务、页、日志与复制的完整请求路径”。上游是“1.5.3 事务日志”,下游是“1.6 多版本并发控制”;若无法解释这条因果关系,术语记忆不能算完成。

在固定MySQL 8.0小型业务库中先预测成功率、实际扫描行、锁或版本、日志位置、资源等待和恢复终点,再只改变一个变量。用“提交结果满足隔离与持久性,读视图、锁和日志边界可解释,原子DDL不留下半完成元数据”验收正常与失败路径,并保存执行计划、Performance Schema摘要、状态变量或业务对账中真正支持结论的部分。

1.6 多版本并发控制

节点合同 12/19 · 收集独立证据。 先写“1.6 多版本并发控制”影响的用户请求、MySQL状态和资源,再把它接入“从连接进入MySQL逻辑层,经优化器到InnoDB事务、页、日志与复制的完整请求路径”。上游是“1.5.4 MySQL中的事务”,下游是“1.7 复制”;若无法解释这条因果关系,术语记忆不能算完成。

在固定MySQL 8.0小型业务库中先预测成功率、实际扫描行、锁或版本、日志位置、资源等待和恢复终点,再只改变一个变量。用“提交结果满足隔离与持久性,读视图、锁和日志边界可解释,原子DDL不留下半完成元数据”验收正常与失败路径,并保存执行计划、Performance Schema摘要、状态变量或业务对账中真正支持结论的部分。

1.7 复制

节点合同 13/19 · 定义用户影响。 先写“1.7 复制”影响的用户请求、MySQL状态和资源,再把它接入“从连接进入MySQL逻辑层,经优化器到InnoDB事务、页、日志与复制的完整请求路径”。上游是“1.6 多版本并发控制”,下游是“1.8 数据文件结构”;若无法解释这条因果关系,术语记忆不能算完成。

在固定MySQL 8.0小型业务库中先预测成功率、实际扫描行、锁或版本、日志位置、资源等待和恢复终点,再只改变一个变量。用“提交结果满足隔离与持久性,读视图、锁和日志边界可解释,原子DDL不留下半完成元数据”验收正常与失败路径,并保存执行计划、Performance Schema摘要、状态变量或业务对账中真正支持结论的部分。

1.8 数据文件结构

节点合同 14/19 · 固定实验输入。 先写“1.8 数据文件结构”影响的用户请求、MySQL状态和资源,再把它接入“从连接进入MySQL逻辑层,经优化器到InnoDB事务、页、日志与复制的完整请求路径”。上游是“1.7 复制”,下游是“1.9 InnoDB引擎”;若无法解释这条因果关系,术语记忆不能算完成。

在固定MySQL 8.0小型业务库中先预测成功率、实际扫描行、锁或版本、日志位置、资源等待和恢复终点,再只改变一个变量。用“提交结果满足隔离与持久性,读视图、锁和日志边界可解释,原子DDL不留下半完成元数据”验收正常与失败路径,并保存执行计划、Performance Schema摘要、状态变量或业务对账中真正支持结论的部分。

1.9 InnoDB引擎

节点合同 15/19 · 定位责任层。 先写“1.9 InnoDB引擎”影响的用户请求、MySQL状态和资源,再把它接入“从连接进入MySQL逻辑层,经优化器到InnoDB事务、页、日志与复制的完整请求路径”。上游是“1.8 数据文件结构”,下游是“1.9.1 JSON文档支持”;若无法解释这条因果关系,术语记忆不能算完成。

在固定MySQL 8.0小型业务库中先预测成功率、实际扫描行、锁或版本、日志位置、资源等待和恢复终点,再只改变一个变量。用“提交结果满足隔离与持久性,读视图、锁和日志边界可解释,原子DDL不留下半完成元数据”验收正常与失败路径,并保存执行计划、Performance Schema摘要、状态变量或业务对账中真正支持结论的部分。

1.9.1 JSON文档支持

节点合同 16/19 · 推演正常路径。 先写“1.9.1 JSON文档支持”影响的用户请求、MySQL状态和资源,再把它接入“从连接进入MySQL逻辑层,经优化器到InnoDB事务、页、日志与复制的完整请求路径”。上游是“1.9 InnoDB引擎”,下游是“1.9.2 数据字典的变化”;若无法解释这条因果关系,术语记忆不能算完成。

在固定MySQL 8.0小型业务库中先预测成功率、实际扫描行、锁或版本、日志位置、资源等待和恢复终点,再只改变一个变量。用“提交结果满足隔离与持久性,读视图、锁和日志边界可解释,原子DDL不留下半完成元数据”验收正常与失败路径,并保存执行计划、Performance Schema摘要、状态变量或业务对账中真正支持结论的部分。

1.9.2 数据字典的变化

节点合同 17/19 · 注入失败条件。 先写“1.9.2 数据字典的变化”影响的用户请求、MySQL状态和资源,再把它接入“从连接进入MySQL逻辑层,经优化器到InnoDB事务、页、日志与复制的完整请求路径”。上游是“1.9.1 JSON文档支持”,下游是“1.9.3 原子DDL”;若无法解释这条因果关系,术语记忆不能算完成。

在固定MySQL 8.0小型业务库中先预测成功率、实际扫描行、锁或版本、日志位置、资源等待和恢复终点,再只改变一个变量。用“提交结果满足隔离与持久性,读视图、锁和日志边界可解释,原子DDL不留下半完成元数据”验收正常与失败路径,并保存执行计划、Performance Schema摘要、状态变量或业务对账中真正支持结论的部分。

1.9.3 原子DDL

节点合同 18/19 · 收集独立证据。 先写“1.9.3 原子DDL”影响的用户请求、MySQL状态和资源,再把它接入“从连接进入MySQL逻辑层,经优化器到InnoDB事务、页、日志与复制的完整请求路径”。上游是“1.9.2 数据字典的变化”,下游是“1.10 小结”;若无法解释这条因果关系,术语记忆不能算完成。

在固定MySQL 8.0小型业务库中先预测成功率、实际扫描行、锁或版本、日志位置、资源等待和恢复终点,再只改变一个变量。用“提交结果满足隔离与持久性,读视图、锁和日志边界可解释,原子DDL不留下半完成元数据”验收正常与失败路径,并保存执行计划、Performance Schema摘要、状态变量或业务对账中真正支持结论的部分。

1.10 小结

节点合同 19/19 · 定义用户影响。 先写“1.10 小结”影响的用户请求、MySQL状态和资源,再把它接入“从连接进入MySQL逻辑层,经优化器到InnoDB事务、页、日志与复制的完整请求路径”。上游是“1.9.3 原子DDL”,下游是“本章生产交付物”;若无法解释这条因果关系,术语记忆不能算完成。

在固定MySQL 8.0小型业务库中先预测成功率、实际扫描行、锁或版本、日志位置、资源等待和恢复终点,再只改变一个变量。用“提交结果满足隔离与持久性,读视图、锁和日志边界可解释,原子DDL不留下半完成元数据”验收正常与失败路径,并保存执行计划、Performance Schema摘要、状态变量或业务对账中真正支持结论的部分。

机制推演:从请求到资源与恢复

连接线程先经过认证与会话管理,服务层解析、重写和优化SQL,再调用InnoDB访问页与索引。InnoDB用锁和版本控制并发,用redo保护崩溃恢复,用undo支持回滚与历史读;binlog把逻辑变更交给复制和时间点恢复。

生产推演始终拆成六层:用户请求与SLO、应用连接和事务、MySQL服务层、InnoDB页锁版本与日志、操作系统及硬件、复制备份和路由。先确定等待发生在哪一层,再选择指标和干预;参数、索引、分片与扩容属于不同层,不能用一个方案覆盖所有症状。

性能证据同时包含工作量和等待。工作量包括每秒请求、实际扫描行、返回字节、日志字节和脏页;等待包括CPU调度、I/O、锁、元数据锁、复制回放与队列。只有延迟下降且结果、持久性和错误预算没有恶化,优化才成立。

可靠性证据必须覆盖最坏时间点。对事务在提交前后崩溃,对副本在接收与应用之间中断,对备份在基线与binlog之间恢复,对分片在路由切换时重试。记录最后确认状态、数据损失上界、恢复步骤、恢复耗时和业务对账,避免把进程重新启动当作服务恢复。

证据解释与独立交接

服务证据固定为什么优化。保存SLI公式、SLO窗口、流量分母、延迟分位数和错误预算燃烧;若用户指标没有改善,底层计数器变漂亮也不能证明价值。缺失采样和维护窗口必须显式处理。

数据库证据解释发生了什么。保存Schema与统计、SQL和参数、计划估计与实际行、锁和版本、redo与binlog位置、状态变量及Performance Schema摘要。重置摘要或重启实例会改变基线,必须记录时间点。

资源证据定位限制。保存CPU利用率与运行队列、内存与交换、磁盘延迟和队列、网络、云盘限额及后台刷新。平均值不能替代分位数和饱和时段,客户端总延迟也不能自动归因于数据库执行。

故障证据证明可恢复。保存故障注入点、最后确认事务、晋升或恢复步骤、RPO/RTO实测、数据对账与旧源隔离。备份任务成功、副本在线或Pod重建都不是业务恢复的充分条件。

本章回顾

重新完成“从连接进入MySQL逻辑层,经优化器到InnoDB事务、页、日志与复制的完整请求路径”:先写SLO和结果合同,按19个目录节点建立因果模型,固定负载,采集基线,只改变一个变量,注入失败并独立对账。最终交付一次事务的连接、计划、锁、版本、日志和复制事件联合轨迹,证明“提交结果满足隔离与持久性,读视图、锁和日志边界可解释,原子DDL不留下半完成元数据”。

复习与生产验收

练习

问题 1:为什么“第1章 MySQL架构”必须覆盖19个正式节点?

问题 2:本页最小运行不变量是什么?

问题 3:怎样构造最小反例?

问题 4:为什么平均延迟不足以验收优化?

问题 5:可靠性变更怎样验证?

问题 6:独立交接至少包含什么?

名词解释

本章出现的专业名词,用大白话再讲一遍。

逻辑架构

逻辑架构以“提交结果满足隔离与持久性,读视图、锁和日志边界可解释,原子DDL不留下半完成元数据”为运行边界,并由正常、压力与故障证据共同验证。

InnoDB

InnoDB以“提交结果满足隔离与持久性,读视图、锁和日志边界可解释,原子DDL不留下半完成元数据”为运行边界,并由正常、压力与故障证据共同验证。

事务

事务以“提交结果满足隔离与持久性,读视图、锁和日志边界可解释,原子DDL不留下半完成元数据”为运行边界,并由正常、压力与故障证据共同验证。

MVCC

MVCC以“提交结果满足隔离与持久性,读视图、锁和日志边界可解释,原子DDL不留下半完成元数据”为运行边界,并由正常、压力与故障证据共同验证。

原子DDL

原子DDL以“提交结果满足隔离与持久性,读视图、锁和日志边界可解释,原子DDL不留下半完成元数据”为运行边界,并由正常、压力与故障证据共同验证。

← 上一页:第4版权威学习地图 · 下一页:第2章 可靠性工程世界中的监控 →

资料与写作方式声明

本章以《高性能MySQL(第4版)》权威目录界定学习范围,并结合正文列出的技术资料独立重写;不宣称复现原书正文,也不沿用原作表述。

原作版权归作者与出版社所有;本站原创教学结构与表述仅供学习交流。

讨论

评论区加载中…