关于数据库:把复杂交给我们把简单还给你丨TiVP-让-SQL-执行计划可视化

37次阅读

共计 2985 个字符,预计需要花费 8 分钟才能阅读完成。

通过 TiDB Hackathon 重新认识了本人的后劲。当你想做一件事件,你会发现自己特地专一在下面,而后一些你感觉不会胜利、不可能的事件也会变得可能。

——TiVP 团队

在刚刚完结的 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 上发了个队友招募贴。

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 优化、执行打算选错等。

如下图所示,TiDB Visual Plan 会将左侧执行的 SQL 语句,进行 JSON 转换和相应算子的统计,并以树形的构造清晰展现执行打算。每个算子点击开展后,会显示其具体的耗时、条数及所应用的资源。算子右上角还会用各类图标对一些问题进行提醒,如耗时比拟长、资源耗费比拟高、执行打算预估和理论执行条数呈现较大偏差等,通过这些提醒,DBA 就能很不便地定位问题模块进行细节排查。

针对简单的 SQL 执行打算,TiDB Visual Plan 还将提供 Advisor 性能,通过 Hint 提醒(如下图的 use_index)和后盾计算,比照优化前后的变动状况,并可通过“Apply”一键利用优化,实现智能辅助调优【注:该性能为蓝图布局,本次 Hackathon 仅演示交互流程】。

此外,TiDB Visual Plan 还可通过耗时剖析、代价剖析等不同维度对 SQL 执行打算进行可视化,提供树形图和经典横向扩大模式,总之你想要的,这里都有。

较量中的挑战与趣事

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 还认为这个视频原本就是无声的),但其实视频是有精心筹备的语音解说。不过没有解说大家也能看懂,也验证了团队的产品哲学,大道至简。

将来工作瞻望

除了取得三等奖,对于被评为“用户之选”奖,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 执行打算可视化服务会是星辰大海。

正文完
 0