《張建-TiDB 查詢優化器的歷史(GOTC深圳會場)(34頁).pdf》由會員分享,可在線閱讀,更多相關《張建-TiDB 查詢優化器的歷史(GOTC深圳會場)(34頁).pdf(34頁珍藏版)》請在三個皮匠報告上搜索。
1、分布式數據庫與存儲專場分布式數據庫與存儲專場張建 2021 年 08 月 01 日張建 2021 年 08 月 01 日本期議題:A History of TiDB Query Optimizer張建,開源愛好者,TiDB MaintainerTiDB SQL 團隊負責人兼 TiKV 產品負責人PingCAP前 MaxCompute 執行引擎研發Alibaba關注數據庫、分布式系統、開源軟件與社區等領域Email:About MeAgenda01Whats TiDB02The History of TiDB Optimizer03Future WorkWhats TiDBWhats TiDBT
2、iDB:全新一棧式實時 HTAP 數據庫一鍵水平擴容或者縮容金融級高可用實時 HTAP云原生的分布式數據庫兼容 MySQL 5.7 協議和 MySQL 生態TiDB-ServerTiFlash NodeTiFlash NodeTiFlash NodeTiKV NodeMPP EngineTiKV NodeTiKV NodeTiKV ClusterOLTP ApplicationsOLAP Applications助推全球助推全球 1500+企企業業互互聯聯網化和數字化網化和數字化10+銀銀行與行與頭頭部金融企部金融企業業網聯交易、網貸核算互聯網業務中臺實時風控、反欺詐三大運三大運營營商商支付與
3、風控征信與賬單系統精準營銷覆蓋中國互覆蓋中國互聯聯網網獨角獨角獸獸企企業業的的 80%萬億量級數據毫秒響應支付、秒殺等場景單個集群1000+節點物流與零售物流與零售實時統計報表數據中臺交易與報表業務隔離美國、日本、美國、日本、東東南南亞頭亞頭部支部支付企付企業業與與電電商商在線支付用戶與訂單管理風控與營銷OLTP 規規?;哪;念^頭部用部用戶戶支撐平安人壽“金管家”單日交易額破1000 億億,超,超 1 億億用用戶戶高可靠、低延高可靠、低延遲遲、可快速、可快速擴擴展展大大降低敏大大降低敏態應態應用開用開發發復復雜雜度度,加快應用上線速度在在線彈線彈性性擴縮擴縮容容滿足不確定業務需求在線支付聯
4、機交易,錢包等高增高增長長交易支撐,交易支撐,3000 萬用萬用戶戶水平水平彈彈性性擴擴展展和幾乎線性的擴展能力友好的開友好的開發發界面界面,應用幾乎無需改動實時實時高并高并發發,高效支撐短時高峰交易及數據訪問,1.5 億億用用戶戶彈彈性高性高擴擴展,展,TiDB on K8s 隨時隨地在線擴展安全高可用,安全高可用,可靠放心的高可用容災保障能力面向零售高增面向零售高增長長交易交易場場景景在在線線核心核心聯聯機支付交易平臺機支付交易平臺面向金融敏面向金融敏態態交易交易場場景景全球全球領領先餐先餐飲飲巨巨頭頭 日本日本頭頭部金融支付企部金融支付企業業 平安人壽在平安人壽在線線金融金融聯聯機服機服
5、務務TiDB HTAP:一:一棧棧式數據服式數據服務務生生態態存儲節點存儲節點數據中樞場景交易交易處處理和在理和在線線分析同步分析同步規規?;;瘓髨蟊肀順I務業務不影響在不影響在線線交易交易流式計算場景混合負載場景實時實時到到賬賬、實時統計實時統計縮縮短短業務業務等待周期,提升用等待周期,提升用戶戶體體驗驗多源多源匯匯聚,聚,統統一數據服一數據服務務節節省系省系統統和數據聚合代和數據聚合代碼碼開開發時間發時間寫寫 SQL 就行了就行了一個TiDB 系統,一個訪問入口,一份數據The History of TiDB OptimizerWhats Query Optimizer目目標標:做一個:做
6、一個執執行行計計劃劃輸入 AST輸出物理執行計劃物理物理執執行行計計劃需要考劃需要考慮慮什么內容:什么內容:選哪個索引子查詢如何執行用什么 Join 算法和 Join 順序.SortHashJoinTableScant1TableScant2MergeJoinIndexJoinIndexScant1IndexScant2select t1.afrom t1join t2on t1.col1=t2.col1order by t1.col1NominalSort采用 1979 年由 Selinger 在 System R 中使用的經典優化器模型TiDB 優優化器框架化器框架簡簡介介TiDBTiKV
7、ParserPhysicalOptimizerRootExecutorSQLASTLogicalPlanPhysicalPlanFeedbackLogicalOptimizerDistSQLStatisticsCardinalityEstimationCopExecutorTiKVCopExecutorTiKVCopExecutorCop TaskCop TaskCop TaskResult優化器的關鍵要素:搜索空間搜索算法代價估算統計信息能幫我們做什么有多少數據滿足條件:id between 10129 and 23819按照索引 date 去讀取到第一個 id 10129 的數據要掃多少數
8、據:where id 10129 order by date limit 1有多少數據滿足條件:s join t on s.id=t.id統計統計信息信息簡簡介介TiDB 1.0 中的統計信息簡介:初始初始階階段:段:擁擁有基本的有基本的統計統計信息和信息和 CBO 能力能力Count-Min Sketchwhere date=2021-08-01where status in(Desiging,testing)TiDB 1.0 中的統計信息簡介:初始初始階階段:段:擁擁有基本的有基本的統計統計信息和信息和 CBO 能力能力Equal-Depth Histogramwhere date bet
9、ween 2021-07-31 and 2021-08-01where age 20;在線業務忽然卡了集群中出現了好多慢查詢TiDB OOM 了.遇到的遇到的問題問題先看先看執執行行計計劃劃根據 parent 和 children 來判斷數據在計算過程中的流向提升提升執執行行計計劃可劃可讀讀性性使數據依賴關系一目了然:樹形結構:上層的節點依賴下層的節點數據作為輸入Build 和 Probe 兩個關鍵:Probe 依賴 Build 作為輸入豐富各種情況下豐富各種情況下問題問題排排查查的方式的方式希望知道實際運行時哪里慢了,優化器估算值和實際值的差距:explain analyze一個 SQL 長
10、時間運行不結束,希望知道它的執行計劃是什么,卡在哪里:explain for connection希望知道慢查詢日志中的 SQL 為什么慢:從記錄 explain 結果到記錄記錄 explain analyze 結結果果希望知道這個 SQL 歷史上的執行計劃是什么,執行時間分別什么樣:statement summary 系列的內部表系列的內部表希望一眼看出哪個 SQL 慢,慢在哪里:TiDB Dashboard趨勢趨勢:信息越來越豐富,工具越來越易用:信息越來越豐富,工具越來越易用TiDB Dashboard什么是優化器 Hint:告訴優化器選哪個具體的索引告訴優化器用什么 Join 算法告訴
11、優化器用什么聚合算法先加先加 Hint,提供,提供 workaround 方法方法SELECT/*+USE_INDEX(t1,idx1),HASH_AGG(),HASH_JOIN(t1)*/count(*)FROM t t1,t t2 WHERE t1.a=t2.b;給 SQL 加 Hint 需要改業務 SQL:SQL 散落在各個地方不好改改 SQL 涉及到應用代碼的修改,需要完整走一遍應用程序的發布流程有些 SQL 是應用程序引用的第三方庫發的,沒法改Hint 有哪些有哪些問題問題SQL Binding:不用修改 Hint需要 super 權限從從 Hint 到到 SQL BindingCR
12、EATE BINDING FORSELECT count(*)from t t1,t t2 WHERE t1.a=t2.a;USINGSELECT/*+USE_INDEX(t1,idx1),HASH_AGG(),HASH_JOIN(t1)*/count(*)FROM t t1,t t2 WHERE t1.a=t2.b;“我有很多 SQL,成千上萬,一個個加 Binding 太累了!”“萬一 SQL 參數的值變化了,原先的執行計劃不夠好怎么辦?”select*from twhere date between?and?;SQL Binding 有哪些有哪些問題問題?從從 SQL Binding 到
13、到 SPMSQLCost-based Plan GenBaselineExists?Execute PlanIs Plan in Baseline?Execute PlanQueue New Plan for verificationExecute Known PlanNoNoYesYesSPM 兩大特性:自動捕獲自動演進于此同于此同時時,我,我們們也在完善也在完善優優化化規則規則和和統計統計信息信息縮小搜索空間,降低犯錯的概率:引入 Skyline Pruning 裁剪一定不優索引引入更多一定優的啟發式規則CREATE TABLE t(id INT,date DATETIME,INDEX i
14、dx1(id),INDEX idx2(id,date);SELECT*FROM tWHERE id=10291 AND date=2021-08-01;于此同于此同時時,我,我們們也在完善也在完善優優化化規則規則和和統計統計信息信息降低基數估算誤差,提升選對執行計劃的能力:引入 TopN 的統計信息引入相關系數的統計信息去除 CM-Sketch 的統計信息xhash collision從從 OLTP 優優化器成化器成長為長為 HTAP 優優化器化器TiDB-ServerTiFlash NodeTiFlash NodeTiFlash NodeTiKV NodeMPP EngineTiKV Nod
15、eTiKV NodeTiKV ClusterOLTP ApplicationsOLAP ApplicationsHTAP 的的優優化器架構化器架構TiFlash Node 1MPP WorkerOptimizerTiFlash Node 2TiFlash Node 3TiDB-ServerMPP WorkerMPP WorkerPlan SegmentParserUserQueryTiKV Node 1TP Queryread KV directlyTiFlash iscomputing/storage combined for now.It forms MPP cluster in AP w
16、orkload.In MPP mode,TiDB-Server becomes the coordinator.Making HTAP real by MPP first release復復雜雜的的優優化器系化器系統統,需要有科學的,需要有科學的測試測試體系體系Optimizer Effectiveness含義:優化器選中的執行計劃不差于多少比例的執行計劃參考:OptMark:A Toolkit for Benchmarking Query Optimizersand,oris covered by an indexpredicae on the attribute:col,=,=,in co
17、nsis the last attributeyesnonoget a new attributeget a record from the tableconstruct filters based on the record復復雜雜的的優優化器系化器系統統,需要有科學的,需要有科學的測試測試體系體系用 q-error 來衡量優化器的估算誤差,降低它:含義:max(est/act,act/est)參考:Preventing Bad Plans by Bounding the Impact of Cardinality Estimation ErrorsTiDB 優化器架構故障診斷和恢復統計信息優化做分布式并行執行計劃建立科學的測試體系總結總結Future Work提高可提高可預測預測性:性:添加更多啟發式規則為什么沒有選這個索引?提高可提高可觀測觀測性:性:Optimizer Trace為什么選了這個索引?提高可提高可擴擴展性:展性:Cascades PlannerFuture WorkTHANKSTHANKS