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 执行计划,适用于联合索引优化、全表扫描根因分析等场景。

posted @ 2025-04-22 14:21  an森  阅读(74)  评论(0)    收藏  举报