来源书籍
高性能MySQL
数据库/存储引擎类
类别清单覆盖
6/6
全书概览
高性能MySQL:第3版
Skill 版本:v7
类别:数据库/存储引擎类
四象限结论:工程实践(高信息浓度 + 较低稳定性)
理由:抽样精读第1章后确认:本书讲透MySQL特有的架构设计 动机——存储引擎可插拔架构(查询处理与数据存储彻底解耦,代价 是跨引擎事务不可靠)、InnoDB聚簇索引对二级索引大小的连带影响、 间隙锁(next-key locking)防幻读的具体机制,这些内容属于讲清 “为什么MySQL这样设计”的高浓度内容。但全书信息高度绑定MySQL 具体版本演进(InnoDB plugin历史、MySQL 5.1⁄5.5⁄5.6特性差异)、 具体工具链(Percona系工具、myisamchk等)和历史存储引擎细节 (MyISAM的.MYD/.MYI文件格式),这些内容会随MySQL版本迭代和 生态演进而过时,因此定级工程实践:架构设计思路和机制原理浓度 高、可迁移,但工具/版本/参数层面绑定当前技术生态,稳定性不如 纯理论书籍。
类别说明:本书系统讲解MySQL的架构、存储引擎、索引、事务、 复制、高可用等内部原理与工程实践,命中”数据库/存储引擎类” (判定标准:”以讲解数据库/存储系统内部原理为主要目标的书籍”)。
与已完成同类书籍的重叠说明(跨书去重):本session已完成 《数据库原理(微课版)》《数据库系统——原理、设计与编程(MOOC版)》 《新型数据库系统:原理、架构与实践》《深入浅出Greenplum分布式 数据库》四本数据库类书籍,覆盖了关系模型、ANSI/SPARC三级模式、 事务ACID、隔离级别定义、MVCC通用原理(尤其PostgreSQL的xmin/ xmax实现)、锁机制、两阶段提交、B+树/B*树索引、复制、CAP/BASE 等核心内容。本书前几章(事务ACID/隔离级别定义、MVCC通用概念、 锁的基本概念)与已完成书籍高度重叠,按跨书去重处理,只为本书 真正独有的角度生卡:MySQL可插拔存储引擎架构、InnoDB与MyISAM等 具体存储引擎的差异化设计、InnoDB聚簇索引/间隙锁等MySQL特有的 具体机制、MySQL特有的查询优化/复制/高可用工程实践细节,这些是 前述书籍(均以PostgreSQL/Greenplum或通用理论为主)未曾触及的 角度,是阶段三处理的重点。
章节筛选
版权页、译者序、推荐序、前言等不纳入正文进度。正文16章+6个 附录按目录结构预判精读/略读,实际取舍在阶段三逐章处理时按 信息浓度和概念强制生卡规则动态调整,附录视内容浓度决定是否 纳入精读。
| 章节号 | 章节标题 | 精读/略读 | 状态 | 卡片数 |
|---|---|---|---|---|
| 01 | MySQL架构与历史 | 精读:可插拔存储引擎架构、InnoDB聚簇索引/间隙锁是本书独有角度;ACID/隔离级别/MVCC通用概念与已完成书籍重叠按跨书去重处理 | done | 3 |
| 02 | MySQL基准测试 | 精读:吞吐量倍数外推业务增长倍数的谬误、并发性该测同时处理请求数而非在线用户数、短期压测因系统余量掩盖真实表现而不可靠是本书独有的方法论价值 | done | 3 |
| 03 | 服务器性能剖析 | 精读:性能的正式定义是响应时间而非CPU利用率/吞吐量、测量范围须精确匹配目标活动、执行时间里可能藏着等待时间、阿姆达尔定律给出优化价值量化上限,是本书独有的性能工程方法论;诊断间歇性问题/pt-query-digest等具体工具使用按浓度过滤 | done | 4 |
| 04 | Schema与数据类型优化 | 精读:”太多列”的行缓冲转换开销、EAV模式受61张表关联上限约束、避免NULL不要走极端(魔法值更易出bug)、分片计数器拆散写热点是本书独有角度;数据类型选择细节与范式/反范式通用原则按浓度过滤或与已完成书籍重叠 | done | 4 |
| 05 | 创建高性能的索引 | 精读:覆盖索引对InnoDB二级索引的特殊价值、前缀索引长度按最坏情况选择性取舍、多列索引列序选择性优先法则的局限、”特殊用户”异常基数击穿索引案例、多范围条件转等值的规避技巧、前缀压缩索引用二分查找换磁盘空间(阶段五类别清单核对补充),是MySQL索引设计的核心方法论;索引维护/冗余索引清理/EXPLAIN工具细节等按浓度过滤 | done | 6 |
| 06 | 查询性能优化 | 精读:慢查询两层诊断框架(请求数据量/扫描数据量)、大DELETE切分批次降低锁与复制延迟、拆分关联查询搬到应用层、IN()子查询被改写为相关子查询的陷阱、大偏移量分页优化(延迟关联/书签分页),是本章查询优化方法论核心;查询缓存机制/hint语法/COUNT优化细节等按浓度过滤 | done | 5 |
| 07 | MySQL高级特性 | 精读:分区裁剪只认列本身不认表达式、分区表打开锁全部底层表的固定开销、临时表算法视图无法下推条件、存储过程的网络/解析开销收益与复制/缓存代价、内部XA两阶段提交同步binlog与InnoDB;触发器/事件/游标/绑定变量/字符集/全文索引/查询缓存细节等按浓度过滤(查询缓存失效粒度已在第6章分解关联查询卡中提及) | done | 5 |
| 08 | 优化服务器设置 | 略读候选:大量参数调优细节按浓度过滤跳过,仅8.2节”什么不该做”三个反模式(比率调优谬误/调优脚本/内存消耗公式)触发硬性优先规则精读生卡 | done | 1 |
| 09 | 操作系统和硬件优化 | 略读候选:CPU/闪存/RAID/SAN选型及vmstat/iostat工具使用按浓度过滤跳过(时效性强),仅9.3.3节”工作集”概念(缓存单位放大效应、聚簇索引对缓存效率的影响)是通用原理,触发硬性优先规则精读生卡 | done | 1 |
| 10 | 复制 | 精读:基于语句/基于行复制的灵活性vs确定性权衡、复制无法扩展写操作(含主-主结构反直觉分析)、InnoDB为复制一致性被迫加锁读的机制、人为制造延迟测追赶速度估算备库容量余量,是MySQL复制特有的方法论;复制拓扑罗列/具体配置参数/故障排查清单等按浓度过滤(与已完成书籍的通用复制概念重叠部分按跨书去重跳过) | done | 4 |
| 11 | 可扩展的MySQL | 精读:通用可扩展性定律(在阿姆达尔定律上叠加协调开销解释扩展性倒退)、冷热数据混页导致缓存误判的具体案例、读写分离脏数据处理策略谱系(会话分离为推荐折中);向上/向外扩展/集群/负载均衡中间件等罗列类内容按浓度过滤,与已完成书籍的通用扩展性概念重叠部分按跨书去重跳过 | done | 3 |
| 12 | 高可用性 | 精读:可用性边际成本递增+风险敞口优先级排序法、MTBF/MTTR两个独立投入维度、宕机多重失效链条与事后复盘的单一根因陷阱;MySQL Cluster/Percona XtraDB Cluster等具体产品方案按浓度过滤(版本/厂商时效性强) | done | 3 |
| 13 | 云端的MySQL | 精读:云计算三个常见误解(不天然可扩展/不天然高可用/不是银弹)是通用技术评估原则,触发硬性优先规则精读生卡;AWS EC2/EBS/RDS等具体产品参数与基准测试数据按浓度过滤(2012年前后硬件数据时效性强,与已完成书籍的云数据库通用概念重叠部分按跨书去重跳过) | done | 1 |
| 14 | 应用层优化 | 精读:最优并发度是吞吐量与延迟的权衡点(排队vs并行执行的延迟对比)、读时失效把集中的缓存失效成本分散到后续读取(对象版本控制机制,呼应第11章读写分离版本判断);具体Web服务器/memcached配置细节按浓度过滤 | done | 2 |
| 15 | 备份与恢复 | 精读:”复制/RAID不是备份”误区(DROP DATABASE测试)、恢复系统天生比备份系统更易被忽视+RPO/RTO规划框架(含mysqldump -d真实案例)、备份一致性拆成数据一致性/文件一致性两个独立维度(InnoDB MVCC快照vs后台线程异步刷盘)、InnoDB崩溃恢复依赖硬件fsync真实承诺(阶段五类别清单核对补充);具体备份工具(XtraBackup/mydumper/mysqldump参数)罗列按浓度过滤 | done | 4 |
| 16 | MySQL用户工具 | 略读:纯工具/产品罗列(GUI客户端/命令行工具/监控系统),无概念性讲解,按浓度过滤全部跳过 | done | 0 |
| A | MySQL分支与变种 | 略读:MariaDB/Percona Server等产品历史罗列,无原理性讲解,按浓度过滤跳过(版本/厂商时效性强) | done | 0 |
| B | MySQL服务器状态 | 略读:SHOW STATUS/PERFORMANCE_SCHEMA字段参数手册类内容,按浓度过滤跳过 | done | 0 |
| C | 大文件传输 | 略读:tar/nc/pigz等UNIX工具操作步骤,无原理性内容,按浓度过滤跳过 | done | 0 |
| D | EXPLAIN | 精读:EXPLAIN只是近似值而非真相(会真实执行FROM子查询、内存/磁盘排序统一显示filesort等局限),与第5-6章索引/查询优化配合;具体列语法/命令格式按浓度过滤 | done | 1 |
| E | 锁的调试 | 精读:MySQL锁分成服务器层与存储引擎层两套互相不可见的系统(隐式锁转换不透明),是本书独有的锁架构角度,与已完成书籍的死锁分析内容不重叠;具体调试命令/工具输出格式按浓度过滤 | done | 1 |
| F | 在MySQL上使用Sphinx | 略读:第三方全文搜索引擎集成配置类内容,按浓度过滤跳过(工具时效性强) | done | 0 |
实践卡进度
| 序号 | 实践标题 | 实践方式 | 状态(pending/done) | 关联章节 | 产出 |
|---|---|---|---|---|---|
| 001 | 用EXPLAIN方法论审查cardbox真实查询的索引设计 | 真实任务 | done | 第5-6章 | 待执行的EXPLAIN QUERY PLAN对比方案,见idea-001 |
| 002 | 核实内部XA三次fsync结论是否被组合提交优化打破 | 证据验证 | done | 第7章 | 已核验:MySQL 5.6组提交机制使平均fsync成本低于3次,已回填至ch07-005卡片 |
| 003 | 横向对比InnoDB间隙锁和SQLite的幻读防范机制 | 横向学习 | done | 第1章 | 待执行的三数据库幻读防范对比方案,见idea-003 |
待关联术语
| 术语名 | 出现章节 | 一句话语境 |
|---|
引用文献
| 标题 | 类型 | 出现章节 | 一句话语境 |
|---|
资金安全问题案例
| 问题标题 | 问题卡 | 解决方案卡(如有) | 出现章节 | 一句话说明 |
|---|
类别清单核对(数据库/存储引擎类)
| 维度 | 覆盖状态(已覆盖/补充生成/未覆盖) | 关联卡片标题或未覆盖理由 |
|---|---|---|
| 存储结构与索引原理 | 已覆盖 | ch05全部6张卡(覆盖索引/前缀索引选择性/多列索引列序/特殊用户案例/多范围条件/前缀压缩索引)+ ch01-002(InnoDB聚簇索引);B树基础结构本身已在本session更早完成的《深入浅出Greenplum》B*树卡片中覆盖,本书聚焦MySQL特有的索引设计策略,按跨书去重不重复讲结构本身 |
| 事务与隔离级别 | 已覆盖(跨书去重+MySQL特有补充) | ACID/隔离级别定义等通用概念已在本session更早完成的4本数据库书籍中生卡,本书按_overview.md”跨书去重”声明不重复;MySQL特有的隔离级别工程后果由ch01-003(间隙锁防幻读)、ch10-003(InnoDB为复制一致性被迫加锁读)、ch15-003(备份的数据一致性用REPEATABLE READ+MVCC实现)三张卡具体补充 |
| 复制与分片策略 | 补充生成 | 主从复制机制由ch10全部4张卡覆盖(语句/行复制权衡、复制无法扩展写、加锁读、容量诊断);分片路由设计原书仅点到为止(”分区是唯一可扩展写入的方法”),未见具体路由算法讲解,判断为原书本身未深入这一子维度,如实标注:分片路由的具体设计模式(一致性哈希/范围分片路由表等)本书未展开,只在ch11-002借InnoDB缓存单位放大案例间接涉及”如何在schema层面为分区做准备” |
| 查询优化器原理 | 已覆盖 | ch06-004(IN()子查询被优化器改写为相关子查询)、附录D-001(EXPLAIN只是近似值,不反映触发器/存储过程影响)、ch06-001(慢查询两层诊断框架)共同覆盖了MySQL查询优化器的决策逻辑与局限 |
| 故障恢复机制 | 已覆盖 | ch07-005(内部XA两阶段提交同步binlog与InnoDB,含2026年组提交优化的核验补充)、ch15-004(InnoDB崩溃恢复依赖硬件fsync真实承诺,阶段五补充生成)共同覆盖了MySQL崩溃恢复的机制与硬件依赖前提;checkpoint细节按浓度过滤(版本参数细节) |
| 并发控制机制 | 已覆盖 | ch01-003(InnoDB间隙锁防幻读,对比PostgreSQL SSI)、ch10-003(InnoDB为复制一致性被迫加锁读)、附录E-001(服务器层与存储引擎层两套锁系统)三张卡从不同角度覆盖了MySQL的锁机制;MVCC通用概念按跨书去重不重复,MySQL特有应用见ch15-003 |
| 存储与计算的工程权衡 | 已覆盖 | ch09-001(工作集概念/缓存单位放大)、ch05-006(前缀压缩索引用二分查找换磁盘空间,阶段五补充生成)、ch04-004(分片计数器拆散写热点,属写放大权衡的一种)共同覆盖了MySQL在存储/计算/内存资源之间的具体权衡案例 |
章节与卡片
01 MySQL架构与历史
- 服务器分层 普通读书笔记卡
01
01 MySQL架构与历史
- 引擎接口边界 普通读书笔记卡
01
- InnoDB聚簇索引让二级索引必须携带主键,因此主键要尽量小 普通读书笔记卡
01 MySQL架构与历史
- 锁粒度权衡 普通读书笔记卡
01
- InnoDB用"间隙锁"而非"快照检测"来防止幻读 普通读书笔记卡
01 MySQL架构与历史
02 MySQL基准测试
- 测量先定目标 普通读书笔记卡
02
- 新系统压测吞吐量高40倍,不代表业务能承受40倍增长 普通读书笔记卡
02 MySQL基准测试
- 微测会误导 普通读书笔记卡
02
- 并发性该测的是同时处理中的请求数,而非"在线用户数" 普通读书笔记卡
02 MySQL基准测试
- 负载要像真实 普通读书笔记卡
02
- 短期压测结论不可靠:系统"余量"消耗完之前,数据看起来都很好 普通读书笔记卡
02 MySQL基准测试
03 服务器性能剖析
- 响应时间切分 普通读书笔记卡
03
- 性能的正式定义是响应时间,优化"CPU利用率"是个陷阱 普通读书笔记卡
03 服务器性能剖析
- 慢不是平均值 普通读书笔记卡
03
- 测量范围必须精确匹配目标活动,而非笼统测整个服务器 普通读书笔记卡
03 服务器性能剖析
- 剖析避免猜测 普通读书笔记卡
03
- 看起来在"执行"的时间里,可能藏着真正的"等待" 普通读书笔记卡
03 服务器性能剖析
- 间歇问题取证 普通读书笔记卡
03
- 阿姆达尔定律给出"值不值得优化"的量化判断标准 普通读书笔记卡
03 服务器性能剖析
- 优化看总收益 普通读书笔记卡
04 Schema与数据类型优化
- 类型越小越好 普通读书笔记卡
04
- "太多列"的隐藏代价:行缓冲到行结构的转换开销 普通读书笔记卡
04 Schema与数据类型优化
- 简单类型更快 普通读书笔记卡
04
- EAV模式在MySQL下特别不适用:受61张表关联上限约束 普通读书笔记卡
04 Schema与数据类型优化
- NULL不是免费 普通读书笔记卡
04
- 避免NULL是好原则,但用魔法值替代反而更容易出bug 普通读书笔记卡
04 Schema与数据类型优化
- 范式反范式 普通读书笔记卡
04
04 Schema与数据类型优化
- 缓存汇总表 普通读书笔记卡
05 创建高性能的索引
- 索引是数据结构 普通读书笔记卡
05
- 覆盖索引:让查询只读索引,无须回表 普通读书笔记卡
05 创建高性能的索引
- B树适合范围 普通读书笔记卡
05
- 前缀索引长度要按最坏情况选择性而非平均值来定 普通读书笔记卡
05 创建高性能的索引
- 选择性决定价值 普通读书笔记卡
05
- 多列索引列序:选择性优先不如避免随机I/O和排序重要 普通读书笔记卡
05 创建高性能的索引
- 覆盖索引 普通读书笔记卡
05
- "特殊用户"案例:异常基数能让看似合理的索引完全失效 普通读书笔记卡
05 创建高性能的索引
- 聚簇索引 普通读书笔记卡
05
- 一个查询只能用上一个范围条件,后面的索引列会失效 普通读书笔记卡
05 创建高性能的索引
- 冗余索引成本 普通读书笔记卡
05
- 前缀压缩索引:用"二分查找"换磁盘空间 普通读书笔记卡
05 创建高性能的索引
- 索引服务查询 普通读书笔记卡
06 查询性能优化
- 慢因访问太多 普通读书笔记卡
06
06 查询性能优化
- 返回前先过滤 普通读书笔记卡
06
- 把大DELETE切成多个小批次,减少锁持有和复制延迟 普通读书笔记卡
06 查询性能优化
- 拆分复杂查询 普通读书笔记卡
06
- 把关联查询拆成多条单表查询,搬到应用层做关联 普通读书笔记卡
06 查询性能优化
- 优化器会犯错 普通读书笔记卡
06
- MySQL把IN()子查询悄悄改写成逐行相关子查询 普通读书笔记卡
06 查询性能优化
- 连接顺序重要 普通读书笔记卡
06
- 大偏移量分页慢的根源:白白扫描并丢弃了前面的行 普通读书笔记卡
06 查询性能优化
07 MySQL高级特性
- 分区不是索引 普通读书笔记卡
07
- 分区裁剪只认分区列本身,遇到表达式就失效 普通读书笔记卡
07 MySQL高级特性
- 外键有成本 普通读书笔记卡
07
- 打开并锁住所有底层表,是分区表的固定开销 普通读书笔记卡
07 MySQL高级特性
- 视图不是缓存 普通读书笔记卡
07
- 临时表算法视图:无法下推条件,也没有索引 普通读书笔记卡
07 MySQL高级特性
- 查询缓存陷阱 普通读书笔记卡
07
- 存储过程省下的是网络与解析开销,代价是复制诡异和缓存浪费 普通读书笔记卡
07 MySQL高级特性
- 特性先看语义 普通读书笔记卡
07
08 优化服务器设置
- 配置源于负载 普通读书笔记卡
08
- 配置优化的三个反模式:都是用通用经验替代对系统的理解 普通读书笔记卡
08 优化服务器设置
09 操作系统和硬件优化
- 瓶颈在最弱处 普通读书笔记卡
09
- "工作集":缓存单位放大让聚簇索引选择影响缓存效率 普通读书笔记卡
09 操作系统和硬件优化
10 复制
- 复制三阶段 普通读书笔记卡
10
- 基于语句和基于行复制:核心权衡是灵活性对确定性 普通读书笔记卡
10 复制
- 复制不是备份 普通读书笔记卡
10
- 复制无法扩展写操作,主-主结构也不行 普通读书笔记卡
10 复制
- 异步有陈旧读 普通读书笔记卡
10
- 为保证复制一致性,InnoDB的非阻塞读会被迫加锁 普通读书笔记卡
10 复制
- 拓扑越简越稳 普通读书笔记卡
10
- 人为制造延迟、测追赶速度,来估算备库容量余量 普通读书笔记卡
10 复制
11 可扩展的MySQL
- 性能非扩展性 普通读书笔记卡
11
11 可扩展的MySQL
- 扩展先拆瓶颈 普通读书笔记卡
11
- 冷热数据混在同一物理页,会让整页被误判为"热" 普通读书笔记卡
11 可扩展的MySQL
- 读扩展较容易 普通读书笔记卡
11
11 可扩展的MySQL
- 负载均衡语义 普通读书笔记卡
12 高可用性
- 可用性是时间 普通读书笔记卡
12
- 可用性不是越高越好,用"风险敞口"给优先级排序 普通读书笔记卡
12 高可用性
- 消除单点 普通读书笔记卡
12
- MTBF和MTTR:高可用工程的两个独立投入维度 普通读书笔记卡
12 高可用性
- 故障切换有代价 普通读书笔记卡
12
- 宕机通常是多重失效环环相扣,事后反思要警惕"单一根因"归罪 普通读书笔记卡
12 高可用性
- 恢复也要设计 普通读书笔记卡
13
- 云计算的三个常见误解:不天然可扩展、不天然高可用、不是银弹 普通读书笔记卡
14 应用层优化
- 从用户体验优化 普通读书笔记卡
14
- 最优并发度:吞吐量和延迟的权衡点 结构图卡
14 应用层优化
- 缓存要有边界 普通读书笔记卡
14
- "读时失效":把集中的缓存失效成本分散到后续每次读 普通读书笔记卡
14 应用层优化
15 备份与恢复
- 备份面向恢复 普通读书笔记卡
15
- 复制和RAID都不是备份:有副本不等于能撤销错误 普通读书笔记卡
15 备份与恢复
- RPO与RTO 普通读书笔记卡
15
15 备份与恢复
- 恢复必须演练 普通读书笔记卡
15
- 备份一致性拆成"数据一致性"和"文件一致性"两个独立维度 普通读书笔记卡
15 备份与恢复
- 保留二进制日志 普通读书笔记卡
15
- InnoDB崩溃恢复真正依赖的是硬件对fsync的真实承诺 普通读书笔记卡
15 备份与恢复
- 快照不是终点 普通读书笔记卡
AD
- EXPLAIN只是近似值,不是真相——它甚至会真的执行子查询 普通读书笔记卡
AE
- MySQL的锁分成服务器层和存储引擎层两套互相看不见的系统 普通读书笔记卡
相关主题
暂无公开主题。