---
title: 'TiDB Hackathon 2021 — 把复杂交给我们，把简单还给你丨TiVP 让 SQL 执行计划可视化'
date: '2022-01-26T00:00:00+08:00'
status: publish
permalink: /blog/tidb-visual-plan
author:
    - PingCAP
    - PingCAP
excerpt: '本篇文章将介绍 TiDB Hackathon 2021 TiVP 团队赛前幕后的精彩故事。'
type: post
id: 3089
category:
    - 社区动态
tag:
    - 'TiDB Hackathon 2021'
post_format: []
profile:
    - PingCAP
enclosure:
    - "https://img1.pingcap.com/prod/Ti_VP_b2ce5a04cd.mp4\n292891074\nvideo/mp4\n"
algolia_posts_post_records_count:
    - '5'
---
> 通过 TiDB Hackathon 重新认识了自己的潜力。当你想做一件事情，你会发现自己特别专注在上面，然后一些你觉得不会成功、不可能的事情也会变得可能。
> 
> —— TiVP 团队

<video controls="" src="https://img1.pingcap.com/prod/Ti_VP_b2ce5a04cd.mp4"></video>

在刚刚结束的 TiDB Hackathon 2021 赛事中，TiVP 赛队的作品 TiDB Visual Plan 实现了 SQL 执行计划的可视化，有利于快速定位及解决执行计划相关的各类问题。由于项目的实用性和从用户角度出发（无论是外部 TiDB 用户，还是 PingCAP 内部研发工程师），摘得了 “三等奖” 和 “用户之选奖”。

> 项目非常聚焦，有效提升了执行计划的可读性，具备一定的索引推荐能力。
> 
> ——评委冯光普
> 
> 当我终于看到可视化的执行计划时，我几乎流下了激动的泪水。毕竟我们之前诊断慢 SQL 实在是太苦了，那么一大屏的执行计划，几乎叫做没法看，而且如果要对比两个执行计划的异同，就更崩溃了。有了可视化，至少分析到底哪里慢的效率会提升很多。
> 
> ——PingCAP 研发副总裁唐刘

为什么做这个项目？
---------

TiVP 是一支由 PingCAP 员工和社区小伙伴临时组成的队伍。在 PingCAP 入职不到半年的 Yves 看到 Hackathon 的宣传，抱着体验下的心态报了个名。作为产研消防队的一员，Yves 在日常工作中会经常看客户执行计划方面的问题，最开始他只有一个朴素的想法：TiDB SQL 调优的需求很大，客户申请的原厂支持里，与执行计划（Plan）相关的问题就过半；SQL 作为一种声明性语言，观察执行计划是排查执行效率的唯一手段，慢 SQL Explain 出来的执行计划异常复杂难懂影响分析效率。在强调软件“可观测性”的今天，能不能做 SQL 执行计划的可视化？

于是他私底下找到身边优化器大佬 Chrysan 聊这个想法，没想到刚聊两分钟就一拍即合，然后大佬拉来了 QA Tammyxia，于是阵容突然就庞大了。但是仨人都是做数据库后端的，可视化可视化，没有前端可不行。抱着试试看的心态，Yves 就在 AskTug 上发了个队友招募贴。

![01.webp](https://img1.pingcap.com/prod/01_c739fe2413.webp)TiDB 开源生态强大的感召力，让第二天就有好几位小伙伴找 Yves 交换了联系方式，其中 92hacker（陈元，在深圳的一个前端开发大牛，尽管其工作内容与数据库不强相关，但一直关注 PingCAP 公众号，了解 TiDB 进展） 与他进行了第一次友好深入的交流，于是队伍就这么拉出来了。

团队的名称 TiVP 是 TiDB Visual Plan 的缩写，大家觉得 VP 也很霸气，且 PingCAP 有许多以 Ti 打头的工具，于是团队就一致通过了这个队名。组完队后距离提交 RFC 还有一段时间，团队浏览了 Hackathon 2020 的获奖项目，还跟往届选手做了经验交流，正如 TiVP 团队所言，dream big、冠军心，这次首次参赛就获奖，一个原因就是目标定得高。

项目解决了什么问题？
----------

TiDB Visual Plan，通过收集 TiDB 数据库侧 SQL 的执行计划和运行时信息，基于开源组件 dalibo/pev2 开发了一个显示界面用于图像化呈现 SQL 的执行计划，对庞杂数据库输出的信息做分类梳理，帮助技术人员更便捷地了解、分析 SQL 语句及其执行逻辑，并可对问题关键高亮提示，从而快速定位以及解决执行计划相关的各类问题，如慢 SQL 优化、执行计划选错等。

![02.webp](https://img1.pingcap.com/prod/02_55aa0dfadc.webp)如下图所示，TiDB Visual Plan 会将左侧执行的 SQL 语句，进行 JSON 转换和相应算子的统计，并以树形的结构清晰展示执行计划。每个算子点击展开后，会显示其具体的耗时、条数及所使用的资源。算子右上角还会用各类图标对一些问题进行提示，如耗时比较长、资源消耗比较高、执行计划预估和实际执行条数出现较大偏差等，通过这些提示，DBA 就能很方便地定位问题模块进行细节排查。

![03.webp](https://img1.pingcap.com/prod/03_3d9ca0b9da.webp)针对复杂的 SQL 执行计划，TiDB Visual Plan 还将提供 Advisor 功能，通过 Hint 提示（如下图的 use\_index）和后台计算，对比优化前后的变动情况，并可通过 “Apply” 一键应用优化，实现智能辅助调优【注：该功能为蓝图规划，本次 Hackathon 仅演示交互流程】。

![04.webp](https://img1.pingcap.com/prod/04_49c59de2a0.webp)此外，TiDB Visual Plan 还可通过耗时分析、代价分析等不同维度对 SQL 执行计划进行可视化，提供树形图和经典横向扩展模式，总之你想要的，这里都有。

![05.webp](https://img1.pingcap.com/prod/05_940362f4c5.webp)比赛中的挑战与趣事
---------

TiVP 团队的 4 名成员都是首次参加 TiDB Hackathon，作为混编队伍，整个参赛过程充满了挑战与欢乐。如 92hacker 谈到的，非常荣幸通过社区找到三个 P 社小伙伴，让他对 PingCAP 的整个印象更好了，决赛前就想不论 TiDB Visual Plan 这个项目能不能拿奖，在比赛后都会尽力把它给融入到 TiDB 的 Dashboard 里面，把技术迁移的事情做完。

### 挑战

TiDB Dashboard 是 TiDB 自 4.0 版本起提供的图形化界面，用于监控及诊断 TiDB 集群。团队刚开始想把 TiDB Visual Plan 的可视化融入到 Dashboard 里面，但在前端选型后，发现一个很大的问题，就是两个技术栈是不兼容的，整个迁移的成本会非常大。由于团队成员日常工作就很忙，当时留给前端开发这边的时间大概只有一两天，但如果迁移至少得一个星期才能完成。最后团队就讨论决定与其把工作重心放在融入到 Dashboard 上，还不如换个方向，对执行计划的可视化本身进行优化，比如跑最复杂的测试 SQL、集成 index recommendation 等。从最后的结果来看，当时做这样一个决策还是相当成功的。

### 趣事

初赛的时候，Demo 演示的那段视频只有队长 Yves 能听得到声音，其他人都听不到声音，而团队成员还非常淡定地坐在那里没有打断（答辩时 Yves 戴着降噪耳机，答辩完之后没拔耳机就信心满满地给评委放 demo 视频直到结束——如下图），以至于让线上的评委们看了一段无声版的 Demo（远在深圳的 92hacker 还以为这个视频本来就是无声的），但其实视频是有精心准备的语音讲解。不过没有讲解大家也能看懂，也验证了团队的产品哲学，大道至简。  
![06.webp](https://img1.pingcap.com/prod/06_ca2c9829c6.webp)

未来工作展望
------

除了获得三等奖，对于被评为 “用户之选” 奖，TiVP 团队觉得非常意外。在做这个项目的时候，团队并不是从一个很大的 scope 着手，而是发现了目前执行计划存在的痛点。在解决执行计划可视化的同时，又发现有很多可以改进的地方，包括易用性、交互性，以及未来的一些智能化等。整个项目的思路就是从用户的角度去想问题，切中用户的痛点，团队猜测也许这是打动 TiDB 用户代表评委的一个重要原因。

尽管 Hackathon 2021 比赛已经落幕，但 TiVP 团队还在为 TiDB Visual Plan 的技术栈迁移到 Dashboard 而持续努力，推动 TiDB 尽快融入这个新功能，让 DBA 从满屏密密麻麻的执行计划代码中得到解放。

目前 TiDB Visual Plan 主要是做执行计划的可视化，未来不仅希望进一步提升内核的可诊断性：如优化器优化流程的可视化；还希望能在深度和广度兼容上做更多的探索：譬如赋予优化器以 whatif 的思考能力，提供给用户一键调优的极佳体验；再譬如通过定义接口协议，把 SQL 调优工具从 TiDB 拓展到 MySQL、PostgreSQL、Oracle 以及 SQL Server 等，做成一个更加通用的云服务版本。正如 TiVP 团队的宣言 “把复杂交给我们，把简单还给你”，云化后兼具易用性、扩展性和智能化的 SQL 执行计划可视化服务会是星辰大海。

> 延展阅读：点击查看更多 [TiDB Hackathon 2021 优秀项目分享](https://cn.pingcap.com/blog/tag/tidb-hackathon-2021/)