SQL优化实践 - MySQL的执行计划可视化
概述
执行计划(Execution Plan)是数据库在执行SQL查询时内部生成的执行策略,它描述了SQL在数据库内部是如何一步一步执行的,是进行诊断SQL性能问题和进行调优的重要依据。随着数据库应用处理复杂度的提高,SQL执行计划也随着SQL也变得越来越复杂。依赖纯文本的执行计划分析阅读难度大,难以把握整体执行计划、定位关键路径及瓶颈,给DBA的性能优化工作带来很大挑战。
执行计划可视化工具直观地将执行计划以流程图形式呈现,清晰展示计划结构,使用视觉元素突出显示关键操作和路径,同时关联SQL语句源码,整合多方面信息进行综合分析。这样可以极大地提高DBA读懂和分析执行计划的效率,快速定位性能瓶颈,针对SQL或索引进行精准优化。
各个商业数据库通常会开发自己的执行计划可视化工具,以帮助数据库使用人员理解SQL是如何执行的,并快速定位SQL的性能问题。而开源数据库虽然用户量巨大,但是执行计划可视化的工具确很少。特别是目前市场上还没有合适的针对MySQL的执行计划可视化工具。
PawSQL Plan Visualizer(PPV)
PawSQL的执行计划可视化工具PawSQL Plan Visualizer(PPV)是基于开源组件pev/pev2开发的一个SQL执行计划可视化工具。它的主要功能包括:
- 支持多种数据库,包括MySQL/PostgreSQL/openGauss/Oracle等
- 支持多种输入,譬如MySQL的json/tree/analyze格式,Oracle的表单格式
- 交互式分析,基于执行时间、代价、行数的高亮展示
- 基于数据库对象和算子的Metrics统计
PawEV对于MySQL的支持
支持版本及格式
MySQL版本 | 支持的输入格式 | 展示信息 |
---|---|---|
大于等于5.6,小于8.0.16 | format=json | 估算的代价/行数 |
大于等于8.0.16, 小于8.0.18 | format=json/format=tree | 估算的代价/行数 |
大于等于8.0.18 | format=json/format=tree/analyze | 实际执行时间/实际的行数/估算的代价/估算的行数 |
创建可视化执行计划
通过将MySQL执行计划的文本输出提交到PawSQL Plan Visualizer,PawSQL以树形的结构清晰展示执行计划。
算子右上角用各类图标对一些问题进行提示,如耗时比较长、估算代价高、执行计划预估和实际执行条数出现较大偏差等,通过这些提示,DBA 就能很方便地定位问题模块进行细节排查。
交互式分析
- 点击头部概要信息,快速定位执行最耗时或是代价最大节点
- 每个算子点击展开后,会显示其具体的耗时、条数及其他信息。
- 点击时间、代价、行数时,以进度条的形式展示各个节点的占比情况
基于对象和算子的统计
頁面右侧有基于对象(表/索引)以及执行计划中的算子进行的统计分析,包括执行时间、估算代价等。
与优化功能的集成
对于选择性能验证的优化任务,PawSQL会获取优化前后的执行计划,并借助PEV对优化前后的执行计划进行可视化的对比。