{
    "componentChunkName": "component---src-templates-blog-blog-detail-tsx",
    "path": "/blog/tidb-visual-plan",
    "result": {"pageContext":{"blog":{"id":"Blogs_340","title":"TiDB Hackathon 2021 — 把复杂交给我们，把简单还给你丨TiVP 让 SQL 执行计划可视化","tags":["TiDB Hackathon 2021"],"category":{"name":"社区动态"},"summary":"本篇文章将介绍 TiDB Hackathon 2021 TiVP 团队赛前幕后的精彩故事。","body":"> 通过 TiDB Hackathon 重新认识了自己的潜力。当你想做一件事情，你会发现自己特别专注在上面，然后一些你觉得不会成功、不可能的事情也会变得可能。\n> <p align=\"right\">—— TiVP 团队</p>  \n\n![三等奖 TiVP.mp4](https://img1.www.pingcap.com/prod/Ti_VP_b2ce5a04cd.mp4)\n\n在刚刚结束的 TiDB Hackathon 2021 赛事中，TiVP 赛队的作品 TiDB Visual Plan 实现了 SQL 执行计划的可视化，有利于快速定位及解决执行计划相关的各类问题。由于项目的实用性和从用户角度出发（无论是外部 TiDB 用户，还是 PingCAP 内部研发工程师），摘得了 “三等奖” 和 “用户之选奖”。\n\n> 项目非常聚焦，有效提升了执行计划的可读性，具备一定的索引推荐能力。\n> <p align=\"right\">——评委冯光普</p>\n\n> 当我终于看到可视化的执行计划时，我几乎流下了激动的泪水。毕竟我们之前诊断慢 SQL 实在是太苦了，那么一大屏的执行计划，几乎叫做没法看，而且如果要对比两个执行计划的异同，就更崩溃了。有了可视化，至少分析到底哪里慢的效率会提升很多。\n> <p align=\"right\">——PingCAP 研发副总裁唐刘</p>\n\n## 为什么做这个项目？\n\nTiVP 是一支由 PingCAP 员工和社区小伙伴临时组成的队伍。在 PingCAP 入职不到半年的 Yves 看到 Hackathon 的宣传，抱着体验下的心态报了个名。作为产研消防队的一员，Yves 在日常工作中会经常看客户执行计划方面的问题，最开始他只有一个朴素的想法：TiDB SQL 调优的需求很大，客户申请的原厂支持里，与执行计划（Plan）相关的问题就过半；SQL 作为一种声明性语言，观察执行计划是排查执行效率的唯一手段，慢 SQL Explain 出来的执行计划异常复杂难懂影响分析效率。在强调软件“可观测性”的今天，能不能做 SQL 执行计划的可视化？\n\n于是他私底下找到身边优化器大佬 Chrysan 聊这个想法，没想到刚聊两分钟就一拍即合，然后大佬拉来了 QA Tammyxia，于是阵容突然就庞大了。但是仨人都是做数据库后端的，可视化可视化，没有前端可不行。抱着试试看的心态，Yves 就在 AskTug 上发了个队友招募贴。\n\n![01.webp](https://img1.www.pingcap.com/prod/01_c739fe2413.webp)\n\nTiDB 开源生态强大的感召力，让第二天就有好几位小伙伴找 Yves 交换了联系方式，其中 92hacker（陈元，在深圳的一个前端开发大牛，尽管其工作内容与数据库不强相关，但一直关注 PingCAP 公众号，了解 TiDB 进展） 与他进行了第一次友好深入的交流，于是队伍就这么拉出来了。\n\n团队的名称 TiVP 是 TiDB Visual Plan 的缩写，大家觉得 VP 也很霸气，且 PingCAP 有许多以 Ti 打头的工具，于是团队就一致通过了这个队名。组完队后距离提交 RFC 还有一段时间，团队浏览了 Hackathon 2020 的获奖项目，还跟往届选手做了经验交流，正如 TiVP 团队所言，dream big、冠军心，这次首次参赛就获奖，一个原因就是目标定得高。\n\n## 项目解决了什么问题？\n\nTiDB Visual Plan，通过收集 TiDB 数据库侧 SQL 的执行计划和运行时信息，基于开源组件 dalibo/pev2 开发了一个显示界面用于图像化呈现 SQL 的执行计划，对庞杂数据库输出的信息做分类梳理，帮助技术人员更便捷地了解、分析 SQL 语句及其执行逻辑，并可对问题关键高亮提示，从而快速定位以及解决执行计划相关的各类问题，如慢 SQL 优化、执行计划选错等。\n\n![02.webp](https://img1.www.pingcap.com/prod/02_55aa0dfadc.webp)\n\n如下图所示，TiDB Visual Plan 会将左侧执行的 SQL 语句，进行 JSON 转换和相应算子的统计，并以树形的结构清晰展示执行计划。每个算子点击展开后，会显示其具体的耗时、条数及所使用的资源。算子右上角还会用各类图标对一些问题进行提示，如耗时比较长、资源消耗比较高、执行计划预估和实际执行条数出现较大偏差等，通过这些提示，DBA 就能很方便地定位问题模块进行细节排查。\n\n![03.webp](https://img1.www.pingcap.com/prod/03_3d9ca0b9da.webp)\n\n针对复杂的 SQL 执行计划，TiDB Visual Plan 还将提供 Advisor 功能，通过 Hint 提示（如下图的 use_index）和后台计算，对比优化前后的变动情况，并可通过 “Apply” 一键应用优化，实现智能辅助调优【注：该功能为蓝图规划，本次 Hackathon 仅演示交互流程】。\n\n![04.webp](https://img1.www.pingcap.com/prod/04_49c59de2a0.webp)\n\n此外，TiDB Visual Plan 还可通过耗时分析、代价分析等不同维度对 SQL 执行计划进行可视化，提供树形图和经典横向扩展模式，总之你想要的，这里都有。\n\n![05.webp](https://img1.www.pingcap.com/prod/05_940362f4c5.webp)\n\n## 比赛中的挑战与趣事\n\nTiVP 团队的 4 名成员都是首次参加 TiDB Hackathon，作为混编队伍，整个参赛过程充满了挑战与欢乐。如 92hacker 谈到的，非常荣幸通过社区找到三个 P 社小伙伴，让他对 PingCAP 的整个印象更好了，决赛前就想不论 TiDB Visual Plan 这个项目能不能拿奖，在比赛后都会尽力把它给融入到 TiDB 的 Dashboard 里面，把技术迁移的事情做完。\n\n### 挑战\n\nTiDB Dashboard 是 TiDB 自 4.0 版本起提供的图形化界面，用于监控及诊断 TiDB 集群。团队刚开始想把 TiDB Visual Plan 的可视化融入到 Dashboard 里面，但在前端选型后，发现一个很大的问题，就是两个技术栈是不兼容的，整个迁移的成本会非常大。由于团队成员日常工作就很忙，当时留给前端开发这边的时间大概只有一两天，但如果迁移至少得一个星期才能完成。最后团队就讨论决定与其把工作重心放在融入到 Dashboard 上，还不如换个方向，对执行计划的可视化本身进行优化，比如跑最复杂的测试 SQL、集成 index recommendation 等。从最后的结果来看，当时做这样一个决策还是相当成功的。\n\n### 趣事\n\n初赛的时候，Demo 演示的那段视频只有队长 Yves 能听得到声音，其他人都听不到声音，而团队成员还非常淡定地坐在那里没有打断（答辩时 Yves 戴着降噪耳机，答辩完之后没拔耳机就信心满满地给评委放 demo 视频直到结束——如下图），以至于让线上的评委们看了一段无声版的 Demo（远在深圳的 92hacker 还以为这个视频本来就是无声的），但其实视频是有精心准备的语音讲解。不过没有讲解大家也能看懂，也验证了团队的产品哲学，大道至简。\n![06.webp](https://img1.www.pingcap.com/prod/06_ca2c9829c6.webp)\n\n## 未来工作展望\n\n除了获得三等奖，对于被评为 “用户之选” 奖，TiVP 团队觉得非常意外。在做这个项目的时候，团队并不是从一个很大的 scope 着手，而是发现了目前执行计划存在的痛点。在解决执行计划可视化的同时，又发现有很多可以改进的地方，包括易用性、交互性，以及未来的一些智能化等。整个项目的思路就是从用户的角度去想问题，切中用户的痛点，团队猜测也许这是打动 TiDB 用户代表评委的一个重要原因。\n\n尽管 Hackathon 2021 比赛已经落幕，但 TiVP 团队还在为 TiDB Visual Plan 的技术栈迁移到 Dashboard 而持续努力，推动 TiDB 尽快融入这个新功能，让 DBA 从满屏密密麻麻的执行计划代码中得到解放。\n\n目前 TiDB Visual Plan 主要是做执行计划的可视化，未来不仅希望进一步提升内核的可诊断性：如优化器优化流程的可视化；还希望能在深度和广度兼容上做更多的探索：譬如赋予优化器以 whatif 的思考能力，提供给用户一键调优的极佳体验；再譬如通过定义接口协议，把 SQL 调优工具从 TiDB 拓展到 MySQL、PostgreSQL、Oracle 以及 SQL Server 等，做成一个更加通用的云服务版本。正如 TiVP 团队的宣言 “把复杂交给我们，把简单还给你”，云化后兼具易用性、扩展性和智能化的 SQL 执行计划可视化服务会是星辰大海。\n\n> 延展阅读：点击查看更多 [TiDB Hackathon 2021 优秀项目分享](https://pingcap.com/zh/blog/?tag=TiDB%20Hackathon%202021)","date":"2022-01-26","author":"PingCAP","fillInMethod":"writeDirectly","customUrl":"tidb-visual-plan","file":null,"relatedBlogs":[]}}},
    "staticQueryHashes": ["1327623483","1820662718","3081853212","3430003955","3649515864","4265596160","63159454"]}