1. 课程导论:慢查询与连接池问题的背景

1.1 问题背景:从一次线上事故说起

在微服务架构中,Go 应用作为高性能后端,常与 MySQL 数据库配合使用。然而,当业务流量突增时,一个常见的现象是:接口响应时间从 5ms 飙升到 5s,数据库 CPU 打满,连接池耗尽,最终导致服务雪崩。

这类问题的根因往往不是单一的,而是 慢查询 与 连接池配置不当 共同作用的结果:

  • 慢查询:SQL 执行时间过长,占用数据库连接资源。
  • 连接池饥饿:Go 应用侧的连接池参数(如 MaxOpenConns、MaxIdleConns、ConnMaxLifetime)未与数据库吞吐能力对齐。
  • Docker 网络延迟:容器化部署下,网络往返时间(RTT)增加,进一步放大连接池的排队效应。
核心矛盾: 慢查询占用了连接池中的连接,导致正常查询等待;连接池参数不合理,又加剧了等待时间;Docker 网络延迟则让每一次连接复用和重建的代价更高。

1.2 课程目标

本课程旨在帮助 Go 开发者系统性地解决上述问题。完成本课程后,你将能够:

能力维度 具体目标
诊断 使用 EXPLAIN、慢查询日志、Go pprof 定位慢查询与连接池瓶颈
调优 根据数据库 QPS/TPS 和 Docker 网络 RTT,计算并配置最优连接池参数
架构 设计 Docker 网络拓扑(host/overlay 模式)以减少网络延迟对连接池的影响
验证 通过压测工具(如 hey、sysbench)量化调优前后的性能差异

1.3 学习路径

本课程共 30 章,分为四个阶段,建议按顺序学习:

  1. 基础篇(第 1-5 章):慢查询与连接池基础理论,Docker 网络模型。
  2. 诊断篇(第 6-12 章):Go 应用与 MySQL 的监控、日志、链路追踪。
  3. 调优篇(第 13-22 章):SQL 索引优化、连接池参数计算、Docker 网络选型。
  4. 实战篇(第 23-30 章):全链路压测、灰度发布、故障演练与持续优化。
课程学习路径(四阶段) 基础篇 第 1-5 章 慢查询·连接池·Docker网络 诊断篇 第 6-12 章 监控·日志·链路追踪 调优篇 第 13-22 章 SQL·连接池·网络选型 实战篇 第 23-30 章 压测·灰度·故障演练 建议按顺序学习,每阶段结束后完成课后实验

1.4 前置知识要求

为了确保学习效果,建议你具备以下基础能力:

领域 具体要求 参考资源
Go 基础
  • 熟悉 database/sql 标准库
  • 了解 goroutine 与 channel 基本用法
  • 能读懂 go pprof 的火焰图
《Go 语言程序设计》第 7-9 章
MySQL 基础
  • 掌握 SELECT/JOIN/GROUP BY 语法
  • 理解 B+ 树索引与 EXPLAIN 输出
  • 了解 InnoDB 锁与事务隔离级别
《高性能 MySQL》第 3-5 章
Docker 基础
  • 能编写 Dockerfile 与 docker-compose.yml
  • 理解 bridge/host/overlay 网络模式
  • 会使用 docker exec 和 docker logs
Docker 官方文档“网络”章节
💡 学习建议: 如果你对某个前置知识点不熟悉,建议先花 1-2 天补齐基础。本课程第 2-5 章也会对关键概念做快速回顾,但不会从头教学。

1.5 慢查询与连接池的关联模型

为了直观理解慢查询与连接池的相互作用,请看下面的架构图。它展示了从 Go 应用到 MySQL 的完整请求路径,以及每个环节可能出现的瓶颈。

慢查询与连接池关联模型 Go 应用 goroutine 并发请求 连接池管理 连接池 MaxOpen: 100 MaxIdle: 10 Docker 网络 bridge/overlay RTT: 0.5ms-5ms 带宽: 1Gbps MySQL 数据库 InnoDB 缓冲池 最大连接数: 200 慢查询 SQL 执行 > 1s 占用连接不释放 瓶颈叠加效应 慢查询 → 连接池占满 → 新请求排队 → 超时雪崩

1.6 课程实验环境

本课程的所有实验均基于以下环境,建议你在学习前搭建好:

  • Go 1.21+
  • MySQL 8.0+(Docker 容器运行)
  • Docker 24.0+ 与 Docker Compose v2
  • 压测工具:hey(HTTP 压测)、sysbench(数据库压测)
  • 监控工具:Prometheus + Grafana(可选,第 6 章开始使用)
⚠️ 注意: 如果你使用 macOS 的 Docker Desktop,请注意 Docker 网络性能与 Linux 原生环境存在差异。第 4 章会专门讨论不同操作系统下的网络延迟对比。