MySQL Trace 工具安装与使用指南
一、工具安装与版本要求
内置工具无需独立安装
MySQL 5.6 及以上版本已内置 Optimizer Trace 功能,无需额外安装组件。
验证 MySQL 版本:通过命令行执行 SELECT VERSION();,确保版本 ≥5.6。
二、启用与配置 Trace 功能
开启 Trace 跟踪
在 MySQL 会话中执行以下命令启用跟踪:
sql
Copy Code
SET optimizer_trace = "enabled=on", end_markers_in_json=on;
此命令激活 JSON 格式的跟踪日志,并添加结束标记便于解析。
设置 Trace 缓存容量
调整缓存大小以防止数据截断:
sql
Copy Code
SET optimizer_trace_max_mem_size = 1048576; -- 默认 1MB,按需调整
若跟踪内容超过限制,可能丢失部分执行计划细节。
三、执行 SQL 并获取跟踪结果
运行目标 SQL 语句
执行需分析的查询,例如:
sql
Copy Code
SELECT address_id, store_id FROM staff WHERE address_id=3 AND store_id=1;
跟踪结果将记录此次查询的优化器决策过程。
提取 Trace 日志
从系统表 INFORMATION_SCHEMA.OPTIMIZER_TRACE 中读取日志:
sql
Copy Code
SELECT * FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE;
输出为 JSON 格式,包含索引选择、成本估算等关键信息。
四、日志解析与优化分析
关键字段解析
steps: 展示优化器决策步骤,包括候选索引列表及过滤条件评估。
chosen_range_access: 显示最终选择的索引及扫描方式(如 range 或 index_merge)。
示例场景分析
索引未命中排查: 若日志显示 "range_scan_alternatives": [],表明无有效索引可用,需优化表结构。
多索引选择逻辑: 通过 "considered_execution_plans" 字段查看优化器对不同索引的成本对比。
五、关闭 Trace 与资源释放
禁用跟踪功能
sql
Copy Code
SET optimizer_trace = "enabled=off";
避免持续跟踪占用系统资源。
清理历史日志
重启 MySQL 服务或刷新系统表:
sql
Copy Code
FLUSH TABLES;
操作提示:结合 EXPLAIN 命令与 Trace 日志,可全面诊断 SQL 执行计划,适用于联合索引优化、全表扫描根因分析等场景。
浙公网安备 33010602011771号