本页是 PmaControl 的原创文档。它保留了用于 MySQL 优化工作的实用索引结构,不复制第三方内容,也不依赖外部产品。
目标
MySQL 调优的目标是降低延迟、稳定吞吐量并避免反复饱和。工作必须从真实测量开始,而不是复制其他服务器上的通用值。
建议的工作顺序
- 采集真实负载:QPS、延迟、错误、连接数、磁盘 I/O、内存和 CPU。
- 使用
performance_schema、慢日志或 digest 工具识别主要查询。 - 检查架构:缺失索引、冗余索引、过宽类型以及没有主键的表。
- 调整 InnoDB:buffer pool、redo log、flush、I/O 线程和持久性策略。
- 复核服务器限制:连接数、打开文件、表缓存和临时表大小。
- 在受控窗口测试,并准备记录清楚的回滚方案。
有用命令
SHOW GLOBAL STATUS LIKE 'Threads_connected';
SHOW GLOBAL STATUS LIKE 'Questions';
SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_reads';
SHOW VARIABLES LIKE 'innodb_buffer_pool_size';
要点
好的 MySQL 调优是渐进式的。没有前后测量就修改变量,会形成运维债务。
建立可比较的基线
记录数据库的准确版本、主机资源、数据集大小、应用版本、流量构成及观测窗口。区分客户端响应时间与 SQL 执行时间:即使单条查询很快,连接池排队、网络往返和应用处理仍可能主导整个请求。变更前后应保持相同的负载和并发度。
SELECT VERSION() AS server_version, @@version_comment AS distribution;
SHOW GLOBAL STATUS WHERE Variable_name IN (
'Uptime', 'Questions', 'Threads_connected', 'Threads_running',
'Innodb_buffer_pool_read_requests', 'Innodb_buffer_pool_reads',
'Innodb_log_waits', 'Created_tmp_tables', 'Created_tmp_disk_tables'
);
在具有代表性的间隔内获取两次快照。Questions 是累计计数器:客户端语句速率 = ΔQuestions / 间隔秒数,而非计数器原值。重启或计数器重置会使该区间失效。同时记录请求延迟的 p50、p95、p99、完成的工作量及错误;平均值降低可能掩盖尾部延迟恶化。
找出消耗资源的查询
SELECT SCHEMA_NAME, LEFT(DIGEST_TEXT, 140) AS digest,
COUNT_STAR AS executions,
ROUND(SUM_TIMER_WAIT / 1000000000000, 3) AS total_seconds,
ROUND(AVG_TIMER_WAIT / 1000000000, 3) AS average_ms,
SUM_ROWS_EXAMINED, SUM_ROWS_SENT
FROM performance_schema.events_statements_summary_by_digest
WHERE DIGEST IS NOT NULL
ORDER BY SUM_TIMER_WAIT DESC
LIMIT 10;
该 MySQL Performance Schema 查询按累计执行时间排序,并非最近窗口的 p95。计时单位为皮秒。检查采集是否启用及重置历史;空结果不能证明服务器没有负载。频繁的短查询可能比单条慢查询消耗更多资源。比较扫描行数和返回行数,然后用典型参数执行 EXPLAIN FORMAT=JSON。EXPLAIN ANALYZE 会实际执行语句,应在受控环境及支持的版本中使用。
根据瓶颈选择措施
| 信号 | 如何确认 | 下一步 |
|---|---|---|
| CPU 使用率高 | 查询成本、扫描、活跃线程 | 减少扫描行数与无效工作 |
| 读 I/O 压力 | 物理读取增量与存储延迟 | 检查访问路径与工作集是否适配 |
| 写入停顿 | 日志等待、刷盘延迟、事务大小 | 检查 redo 容量和存储,保持所需持久性 |
| 锁等待 | 阻塞事务与访问顺序 | 缩短事务并检查索引 |
逐项验证变更
写明假设、原参数或原表结构、预期收益和回滚条件。采用一致的缓存预热方式,重复有代表性的试验并保留原始结果。综合比较延迟、吞吐量、错误、CPU、内存、I/O 与复制延迟。若加速导致结果正确性、持久性或其他重要负载退化,应拒绝该变更。保留变更前还需验证高峰流量及完整业务周期。