「SQL at SCALE」(出自 PingCAP 官網)是咱們對 TiDB 的一個精簡歸納,而咱們 TiDB SQL Engine Team 正是負責這 3 個單詞中的 「SQL」 部分,其重要性可見一斑。SQL 在數據庫中的大體處理流程能夠簡短歸納爲查詢優化和執行,這期間涉及到 SQL Parser、優化器、統計信息和執行引擎等模塊,他們就是 TiDB SQL Engine Team 目前所負責的模塊。接下來我會用簡短的篇幅向你們介紹 SQL Engine 的背景知識,以及咱們在作的事情,面臨的挑戰等。html
優化器是 SQL 引擎的大腦,負責查詢優化。查詢優化的主要工做歸納起來很簡單:搜索可行的執行計劃,從中挑一個最好的。但要作好這兩件事倒是整個分佈式數據庫中最難的地方。ios
1979 年 Selinger 發佈了 「Access Path Selection in a Relational Database Management System」,正式拉開了 Cost Based Optimization 的帷幕,這篇論文也被視爲 CBO 優化器的聖經。在這以後陸續出現了 Starburst(1988 年),Volcano Optimizer Generator(1993 年)和 Cascades Framework(1995 年) 等,每一年數據庫三大頂會中也能看到很多查詢優化相關的論文,整個優化器領域可謂是蓬勃發展。但即便如此,優化器也仍然有不少問題未能獲得很好的解決,好比:git
做爲一個從頭至尾徹底本身手寫的優化器,TiDB 優化器的發展歷史也算精彩:一開始咱們是 Selinger 的 System R 模型,可是它的擴展性不是很好,搜索空間有限,維護成本也高,因而咱們調研後,決定開發 Cascades 模型的新優化器。具體請參考:十分鐘成爲Contributor 系列| 爲Cascades Planner 添加優化規則 和 揭祕TiDB 新優化器:Cascades Planner 原理解析。在開發 Cascades Planner 的同時,咱們還在作着另一件很是重要的事情,提高優化器的穩定性:github
重要的事情重複 3 遍:優化器的穩定性很是重要。算法
除了穩定性以外,還有性能問題:spring
能夠預見,在這條道路上,優化器又將迎接新的困難和挑戰,不斷自我演進。數據庫
個人第一份工做從執行引擎開始,對它的感情異常深厚。執行引擎的目標是儘可能利用計算資源,正確且快速的完成執行計劃所描述的計算任務。光有看起來很完美的執行計劃,卻沒有高效的執行引擎,整個 SQL 引擎也是廢的。express
執行引擎也是一個熱門的研究領域。最經典的執行模型當屬 1994 年 Goetz Graefe 發表的 Volcano 迭代器模型,至今仍被廣大數據庫使用。緣由很簡單:接口抽象度高,擴展性好,實現起來簡單。在數據量不大的 TP 請求中,這種模型足夠用了。不事後來你們發現,隨着數據量的上升,這玩意的執行性能不好:每完成一條數據的計算,要額外花費的不少 CPU 指令,計算效率很是低。因而有了後來的兩大優化方向:Vectorization 和 Compilation,各自的表明分別爲:2005 年 Marcin Zukowski 的 」MonetDB/X100: Hyper-Pipelining Query Execution」 和 2011 年 Thomas Neumann 的 「Efficiently Compiling Efficient Query Plans for Modern Hardware」。架構
除了執行框架,如何利用 CPU 硬件特性優化各類執行算子也被普遍的討論和研究。好比 2013 年的《Multi-Core, Main-Memory Joins: Sort vs. Hash Revisited》這篇論文詳細的探討和對比了 Hash Join 和 Merge Join 的實現和性能,2015 年的《Rethinking SIMD Vectorization for In-Memory Databases》這篇論文詳細討論瞭如何利用 SIMD 指令提高 SQL 算子性能。此外,底層軟硬件技術的革新帶來更多的優化機會,好比還有一系列論文來討論如何適配 NUMA 架構,提高算子執行性能等。框架
做爲一個從頭至尾徹底本身手寫的執行引擎,TiDB 執行引擎的發展也很是豐富多彩:一開始咱們使用的是傳統 Volcano 迭代器模型,後來咱們和社區同窗在 TiDB 2.0 版本中將其優化成了向量化模型(Issue/5261),獲得了巨大的性能提高:TPC-H 50G, TiDB 2.0 VS 1.0。以後咱們和社區同窗優化了聚合算子,重構了整個聚合函數的執行框架,執行性能又取得了飛躍的發展(Issue/6952)。再以後,咱們和社區同窗優化了表達式執行框架,使得表達式執行效率獲得了 10 倍的性能提高,這期間 10x Performance Improvement for Expression Evaluation Made Possible by Vectorized Execution and the Community 這篇文章還佔據了 Hacker News 的首頁和 DZone Database 頭版頭條。
穩定性和易用性也很是重要。爲了解決用戶 OOM 的問題,咱們前後引入了內存追蹤和記錄的機制,後來乾脆讓算子落盤真正解決內存使用過多的問題,另外咱們也在優化排查問題的調查工具,方便在出問題時快速定位和 workaround。
如前文所說,目前 TiDB 正在 HTAP 之路上邁出堅實的步伐。執行引擎將在新的征程上肩負着新的使命。在分佈式數據庫中,廣義上的執行引擎須要考慮更多的事情:任務如何調度?shuffle 如何優化?目前三套執行引擎(TiDB、TiKV、TiFlash)三套代碼的維護成本如何下降?這些問題都等待着咱們去探索和解決,能夠預見,在這條道路上,執行引擎又將迎接新的困難和挑戰,不斷自我演進。
很開心,TiDB 的優化器和執行引擎是從零開始由咱們的小夥伴們純手工打造的,咱們有很大的自由度來發揮本身的創造力;很緊張,上面這些列出來的種種問題咱們都會遇到;很榮幸,咱們可以和業界大牛、廣大開源愛好者們一塊兒來攻克這些難題;也頗有成就感,咱們能在廣大 TiDB 用戶的業務中看到這些改進爲他們帶來的價值。
咱們熱愛開源,相信開源可以爲咱們的產品帶來巨大的收益,也願意爲開源奉獻,很是期待一樣熱愛開源的你的加入。若是你:
那麼咱們就加入咱們吧,一塊兒向這些難題發起挑戰,構建一個前沿、穩定的優化器和高效易用的執行引擎。
咱們認爲優秀的工程師或多或少有如下共同特質:· A Quick Learner
· A- n Earnest Curiosity
· Faith in Open Source
· Self-driven
· Get Things Done若是你符合以上特質,歡迎進入招聘頁面查看目前開放的工做機會。
簡歷投遞通道:hire@pingcap.com
實習生:公司的各項福利和學習資源對實習生全面開放,更重要的是實習生還未畢業就有機會接觸工業級項目,並且實習期間表現優異者將有機會得到校招綠色通道特權。針對實習時間並不充裕的小夥伴,你能夠先經過 Talent Plan 豐富基礎知識(https://university.pingcap.co...),也能夠經過參與 TiDB 開源社區得到更多實踐機會!
伯樂推薦:若是你身邊有符合以上要求的小夥伴,也能夠找咱們聊一聊,推薦成功就有機會得到伯樂推薦獎勵。伯樂推薦郵件格式:[伯樂推薦] 候選人姓名-職位名稱-推薦人姓名-推薦人手機號。
TiDB Architecture Team:挑戰數據庫的本質難題
TiDB SQL Infra Team:一塊兒打造從計算層到存儲層的完美橋樑