MySQL 架构与生产实践 · 知识图谱总览

基于第 01 ~ 20 讲整理 · 系统如何与 MySQL 打交道 · InnoDB 架构 · 生产规划/压测/监控 · Buffer Pool 内核机制

系统如何与 MySQL 交互(01 讲) Server 层 SQL 执行链路(02 讲) 生产实践三部曲(05 ~ 10 讲) Buffer Pool 核心机制(11 ~ 20 讲) InnoDB 存储引擎架构(03 ~ 04 讲) 课程脉络 · 第 01 ~ 20 讲 深入引擎内部 Server 层组件全景 有了数据库之后 引擎里最核心的内存组件 连接建立后 生产就绪后 执行器调用的就是引擎 Java 业务系统 MySQL 驱动 · 数据库连接池 MySQL Server 层 连接池 · SQL 接口 · 解析器 · 优化器 · 执行器 通用的 SQL 处理组件 · 与存储引擎解耦 存储引擎插件 InnoDB / MyISAM / Memory MySQL 驱动 mysql-connector-java · 建立网络连接 数据库连接池 DBCP / C3P0 / Druid · 连接复用不销毁 MySQL 自己的连接池 维护多系统连接 · 校验账号密码与权限 工作线程 → SQL 接口 网络连接必须由线程监听读取 解析器 → 优化器 看懂 SQL · 生成最优执行计划 执行器 按执行计划调用存储引擎接口 机器配置规划(05) 8核16G 起步 · 16核32G 推荐 · SSD sysbench 基准压测(06~08) QPS / TPS · 硬件合理负载内的极限 Prometheus + Grafana 监控(09~10) 机器指标 + MySQL 指标可视化 上线前心里有数 这套库能抗多少 QPS / TPS · 瓶颈在哪 缓存页 + 描述数据(11~12) 16KB 页 · 描述块 ~800B(约 5%) free / flush / LRU 三大链表(13~15) 空闲 · 脏页 · 冷热淘汰 简单 LRU 的问题(16) 预读 + 全表扫描 · 误伤热数据 冷热分离 LRU(17~19) old_blocks_pct=37 · time=1000ms 后台刷盘时机(20) 定时刷冷区尾部 + flush 链表脏页 Buffer Pool 缓冲池 缓存数据页 · 内存中执行增删改 undo 日志 更新前旧值 · 支持事务回滚 redo log buffer 记录修改 · 宕机恢复的依据 提交事务:redo + binlog 刷盘 两阶段提交 · commit 标记保证一致 binlog 归档日志 server 层 · 逻辑日志 · 主从复制基石 后台 IO 线程 随机把 Buffer Pool 脏数据刷回磁盘 第 01 讲 系统与 MySQL 交互 驱动 · 连接池 第 02 讲 Server 层架构 接口·解析·优化·执行 第 03 ~ 04 讲 InnoDB 架构 undo · redo · binlog 第 05 ~ 08 讲 生产规划与压测 sysbench · 机器观察 第 09 ~ 10 讲 监控系统 Prometheus + Grafana 第 11 ~ 20 讲 Buffer Pool 深入 三大链表 · LRU 进化 图例 MySQL 核心机制 系统侧 / 交互 生产实践 / 配置 正确做法 / 结论 问题 / 陷阱 知识流向

这条主线讲什么

  • • 系统通过驱动 + 连接池与 MySQL 交互,MySQL 也有自己的连接池
  • • Server 层:SQL 接口 → 解析器 → 优化器 → 执行器,是通用组件
  • • 存储引擎可插拔,生产标配 InnoDB,真正读写内存与磁盘
  • • 一次更新:Buffer Pool + undo + redo buffer → 提交刷盘 → 后台 IO 刷脏

生产实践三部曲(点击跳转)

  • • 规划与压测:8核16G 起步 / 16核32G 推荐,sysbench 压出极限 QPS
  • • 监控体系:Prometheus 采集存储 + Grafana 可视化报表
  • • 顺序:选机器 → DBA 部署 → 基准压测 → 部署监控 → 再开发系统
  • • 数据库压测 ≠ Java 系统压测:先知道库能抗多少,再看系统能抗多少

Buffer Pool 专题(点击跳转)

  • • 结构与三大链表:缓存页/描述数据、free、flush、LRU
  • • LRU 进化:预读与全表扫描的坑 → 冷热分离方案 → 刷盘时机
  • • 冷热隔离思想同样适用于 Redis 缓存设计(热门数据预加载)