通過 TiDB Hackathon 重新認識了自己的潛力。當你想做一件事情,你會發(fā)現(xiàn)自己特別專注在上面,然后一些你覺得不會成功、不可能的事情也會變得可能。
——TiVP 團隊
在剛剛結(jié)束的 TiDB Hackathon 2021 賽事中,TiVP 賽隊的作品 TiDB Visual Plan 實現(xiàn)了 SQL 執(zhí)行計劃的可視化,有利于快速定位及解決執(zhí)行計劃相關(guān)的各類問題。由于項目的實用性和從用戶角度出發(fā)(無論是外部 TiDB 用戶,還是 PingCAP 內(nèi)部研發(fā)工程師),摘得了 “三等獎” 和 “用戶之選獎”。
項目非常聚焦,有效提升了執(zhí)行計劃的可讀性,具備一定的索引推薦能力。
——評委馮光普
當我終于看到可視化的執(zhí)行計劃時,我?guī)缀趿飨铝思拥臏I水。畢竟我們之前診斷慢 SQL 實在是太苦了,那么一大屏的執(zhí)行計劃,幾乎叫做沒法看,而且如果要對比兩個執(zhí)行計劃的異同,就更崩潰了。有了可視化,至少分析到底哪里慢的效率會提升很多。
——PingCAP 研發(fā)副總裁唐劉
為什么做這個項目?
TiVP 是一支由 PingCAP 員工和社區(qū)小伙伴臨時組成的隊伍。在 PingCAP 入職不到半年的 Yves 看到 Hackathon 的宣傳,抱著體驗下的心態(tài)報了個名。作為產(chǎn)研消防隊的一員,Yves 在日常工作中會經(jīng)常看客戶執(zhí)行計劃方面的問題,最開始他只有一個樸素的想法:TiDB SQL 調(diào)優(yōu)的需求很大,客戶申請的原廠支持里,與執(zhí)行計劃(Plan)相關(guān)的問題就過半;SQL 作為一種聲明性語言,觀察執(zhí)行計劃是排查執(zhí)行效率的唯一手段,慢 SQL Explain 出來的執(zhí)行計劃異常復(fù)雜難懂影響分析效率。在強調(diào)軟件“可觀測性”的今天,能不能做 SQL 執(zhí)行計劃的可視化?
于是他私底下找到身邊優(yōu)化器大佬 Chrysan 聊這個想法,沒想到剛聊兩分鐘就一拍即合,然后大佬拉來了 QA Tammyxia,于是陣容突然就龐大了。但是仨人都是做數(shù)據(jù)庫后端的,可視化可視化,沒有前端可不行。抱著試試看的心態(tài),Yves 就在 AskTug 上發(fā)了個隊友招募貼。
TiDB 開源生態(tài)強大的感召力,讓第二天就有好幾位小伙伴找 Yves 交換了聯(lián)系方式,其中 92hacker(陳元,在深圳的一個前端開發(fā)大牛,盡管其工作內(nèi)容與數(shù)據(jù)庫不強相關(guān),但一直關(guān)注 PingCAP 公眾號,了解 TiDB 進展) 與他進行了第一次友好深入的交流,于是隊伍就這么拉出來了。
團隊的名稱 TiVP 是 TiDB Visual Plan 的縮寫,大家覺得 VP 也很霸氣,且 PingCAP 有許多以 Ti 打頭的工具,于是團隊就一致通過了這個隊名。組完隊后距離提交 RFC 還有一段時間,團隊瀏覽了 Hackathon 2020 的獲獎項目,還跟往屆選手做了經(jīng)驗交流,正如 TiVP 團隊所言,dream big、冠軍心,這次首次參賽就獲獎,一個原因就是目標定得高。
項目解決了什么問題?
TiDB Visual Plan,通過收集 TiDB 數(shù)據(jù)庫側(cè) SQL 的執(zhí)行計劃和運行時信息,基于開源組件 dalibo/pev2 開發(fā)了一個顯示界面用于圖像化呈現(xiàn) SQL 的執(zhí)行計劃,對龐雜數(shù)據(jù)庫輸出的信息做分類梳理,幫助技術(shù)人員更便捷地了解、分析 SQL 語句及其執(zhí)行邏輯,并可對問題關(guān)鍵高亮提示,從而快速定位以及解決執(zhí)行計劃相關(guān)的各類問題,如慢 SQL 優(yōu)化、執(zhí)行計劃選錯等。
如下圖所示,TiDB Visual Plan 會將左側(cè)執(zhí)行的 SQL 語句,進行 JSON 轉(zhuǎn)換和相應(yīng)算子的統(tǒng)計,并以樹形的結(jié)構(gòu)清晰展示執(zhí)行計劃。每個算子點擊展開后,會顯示其具體的耗時、條數(shù)及所使用的資源。算子右上角還會用各類圖標對一些問題進行提示,如耗時比較長、資源消耗比較高、執(zhí)行計劃預(yù)估和實際執(zhí)行條數(shù)出現(xiàn)較大偏差等,通過這些提示,DBA 就能很方便地定位問題模塊進行細節(jié)排查。
針對復(fù)雜的 SQL 執(zhí)行計劃,TiDB Visual Plan 還將提供 Advisor 功能,通過 Hint 提示(如下圖的 use_index)和后臺計算,對比優(yōu)化前后的變動情況,并可通過 “Apply” 一鍵應(yīng)用優(yōu)化,實現(xiàn)智能輔助調(diào)優(yōu)【注:該功能為藍圖規(guī)劃,本次 Hackathon 僅演示交互流程】。
此外,TiDB Visual Plan 還可通過耗時分析、代價分析等不同維度對 SQL 執(zhí)行計劃進行可視化,提供樹形圖和經(jīng)典橫向擴展模式,總之你想要的,這里都有。
比賽中的挑戰(zhàn)與趣事
TiVP 團隊的 4 名成員都是首次參加 TiDB Hackathon,作為混編隊伍,整個參賽過程充滿了挑戰(zhàn)與歡樂。如 92hacker 談到的,非常榮幸通過社區(qū)找到三個 P 社小伙伴,讓他對 PingCAP 的整個印象更好了,決賽前就想不論 TiDB Visual Plan 這個項目能不能拿獎,在比賽后都會盡力把它給融入到 TiDB 的 Dashboard 里面,把技術(shù)遷移的事情做完。
挑戰(zhàn)
TiDB Dashboard 是 TiDB 自 4.0 版本起提供的圖形化界面,用于監(jiān)控及診斷 TiDB 集群。團隊剛開始想把 TiDB Visual Plan 的可視化融入到 Dashboard 里面,但在前端選型后,發(fā)現(xiàn)一個很大的問題,就是兩個技術(shù)棧是不兼容的,整個遷移的成本會非常大。由于團隊成員日常工作就很忙,當時留給前端開發(fā)這邊的時間大概只有一兩天,但如果遷移至少得一個星期才能完成。最后團隊就討論決定與其把工作重心放在融入到 Dashboard 上,還不如換個方向,對執(zhí)行計劃的可視化本身進行優(yōu)化,比如跑最復(fù)雜的測試 SQL、集成 index recommendation 等。從最后的結(jié)果來看,當時做這樣一個決策還是相當成功的。
趣事
初賽的時候,Demo 演示的那段視頻只有隊長 Yves 能聽得到聲音,其他人都聽不到聲音,而團隊成員還非常淡定地坐在那里沒有打斷(答辯時 Yves 戴著降噪耳機,答辯完之后沒拔耳機就信心滿滿地給評委放 demo 視頻直到結(jié)束——如下圖),以至于讓線上的評委們看了一段無聲版的 Demo(遠在深圳的 92hacker 還以為這個視頻本來就是無聲的),但其實視頻是有精心準備的語音講解。不過沒有講解大家也能看懂,也驗證了團隊的產(chǎn)品哲學,大道至簡。
未來工作展望
除了獲得三等獎,對于被評為 “用戶之選” 獎,TiVP 團隊覺得非常意外。在做這個項目的時候,團隊并不是從一個很大的 scope 著手,而是發(fā)現(xiàn)了目前執(zhí)行計劃存在的痛點。在解決執(zhí)行計劃可視化的同時,又發(fā)現(xiàn)有很多可以改進的地方,包括易用性、交互性,以及未來的一些智能化等。整個項目的思路就是從用戶的角度去想問題,切中用戶的痛點,團隊猜測也許這是打動 TiDB 用戶代表評委的一個重要原因。
盡管 Hackathon 2021 比賽已經(jīng)落幕,但 TiVP 團隊還在為 TiDB Visual Plan 的技術(shù)棧遷移到 Dashboard 而持續(xù)努力,推動 TiDB 盡快融入這個新功能,讓 DBA 從滿屏密密麻麻的執(zhí)行計劃代碼中得到解放。
目前 TiDB Visual Plan 主要是做執(zhí)行計劃的可視化,未來不僅希望進一步提升內(nèi)核的可診斷性:如優(yōu)化器優(yōu)化流程的可視化;還希望能在深度和廣度兼容上做更多的探索:譬如賦予優(yōu)化器以 whatif 的思考能力,提供給用戶一鍵調(diào)優(yōu)的極佳體驗;再譬如通過定義接口協(xié)議,把 SQL 調(diào)優(yōu)工具從 TiDB 拓展到 MySQL、PostgreSQL、Oracle 以及 SQL Server 等,做成一個更加通用的云服務(wù)版本。正如 TiVP 團隊的宣言 “把復(fù)雜交給我們,把簡單還給你”,云化后兼具易用性、擴展性和智能化的 SQL 執(zhí)行計劃可視化服務(wù)會是星辰大海。