天天看點

分區的現狀與未來規劃

作者:sultan8252​
  1. 背景

自 TiDB 3.0 版本釋出以來,分區表功能就進入到各位 廣大使用者的視野中。使用使用者越來越多,同時分區表上暴露出的問題也越來越明顯,大家對分區表功能與性能上改進的呼聲也越來越高。

通過在 AskTUG 與 Github Issue以及 PR 需求,和分區表相關問題需求的整理,給出了如下表格。希望通過這個表格讓大家在使用分區表時候可以避開一些已知問題,快速的排雷高效使用 TiDB。

  1. 統計整理

圖檔

​​

分區的現狀與未來規劃

​​

需求分類 問題 問題描述 問題 CASE 修複/實作版本 備注
查詢過濾裁剪 LIKE / BETWEEN / IN / OR 查詢多條記錄不支援裁剪 在使用LIKE / BETWEEN / IN / OR 關鍵字對分區表的分區建進行 過濾查詢時,不能有效對分區進行裁剪。而是使用的 全表掃描,使 SQL 效能降低 ​​asktug-33789​​ v4.0.0 逐漸傳遞 臨時解決:可以嘗試使用 Union ALL 替代
查詢過濾裁剪 首分區無法被裁剪 在分區表上使用 分區鍵進行 range 查詢 及時 range 範圍不包含手分區,依然會被選中 ​​#14158​​​ ​​asktug-639​​ v4.0.0 已傳遞
查詢過濾裁剪 分區條件 f(x) op const,查詢條件 g(x) op const,op 是大于小于無法裁剪 分區函數使用的 f(x) 函數,查詢時候使用 g(x) 函數,且 運算符為 大于或小于,分區裁剪失效。 ​​asktug-639​​ v4.0.0 已傳遞
查詢過濾裁剪 Range 分區等值傳遞情況不能裁剪 查詢條件沒有直接使用分區列,但是有分區弄跟其它列的等值條件。如 : id 是分區列,如下查詢應可以對分區表進行裁剪,select * from t where c = 1 and id = c; ​​#20139​​ 5.0 傳遞
分區表維護管理 表分區過多性能問題 表分區過多緻使分區表統計資訊收集異常。導緻 TiDB CPU 到 100% ​​#18325​​ 5.0 傳遞
分區表維護管理 轉換非分區表為分區表 将一張同構的普通表轉換為分區表的一個分區 計劃 6.0+ 傳遞
分區表維護管理 支援二級分區 支援在現有分區下設定子分區 計劃 6.0+ 傳遞
分區表維護管理 便捷删除舊分區 目前删除分區通過分區 id 進行删除 ​​asktug-33424​​ 5.0 傳遞
分區表維護管理 Geo partition & Placement rule 配合 利用分區表指定不同 地區,優化查詢端可以就近地域進行查詢 ​​#18199​​​ ​​#18030​​ 5.0 傳遞
複雜查詢支援 分區表支援 Index Join 在使用 Join 對分區表進行連接配接查詢時,如果跨越多個分區,不能有效使用 index join ​​asktug-35538​​​ ​​asktug-33191​​ 5.0 傳遞 聲明:由于代碼邏輯屬于重構,隻在 v5.0.0 提供完整支援。在 v4.0.6 中單個分區可以使用 Indexjoin
豐富分區規則 唯一索引不包含分區鍵支援全局索引 唯一索引不需要是 partition key 的一部分 ​​asktug-1904​​ 預計 5.0 傳遞
豐富分區規則 BY LIST 按日期列的天屬性取模到固定幾個分區 支援 BY LIST 分區類型 ​​asktug-2718​​ 預計 5.0 傳遞
豐富分區規則 BY KEY 希望對非數字列進行 HASH 分區 支援 BY KEY 分區類型 ​​asktug-32994​​ 無計劃
執行性能不佳 裁剪導緻 sql compile 時間過長 (已知代碼問題) V4.0.0 傳遞
執行性能不佳 分區表在非裁剪的情況下掃表太慢 諸如 select * from partition_table limit 1 ,未進行分區裁剪。 ​​asktug-1117​​​ ​​asktug-2718​​ 5.0 傳遞 使用 select * from partition_table t partition(p0) limit 1 指定分區進行查詢
執行性能不佳 寫入分區表熱點問題
  1. Release List
  • v4.0 GA
  • 建立和更改表時新增檢查分區表是否使用唯一字首索引的功能​​#17213​​
  • 分區表中支援​

    ​admin check index​

    ​​ 、​

    ​admin cleanup index​

    ​​ 和​

    ​admin recover index​

    ​​​#17392​​​​#17405​​​​#17317​​
  • 修複​

    ​tidb_opt_agg_push_down​

    ​​ 開啟且聚合函數下推分區表資訊時,由于邏輯處理不正确導緻系統 panic 的問題​​#17328​​
  • 修複​

    ​tidb_opt_agg_push_down​

    ​​ 開啟且聚合函數下推分區表資訊時,由于邏輯處理不正确導緻系統 panic 的問題​​#17328​​
  • v4.0.5
  • 支援分區表的預打散功能​​#17863​​
  • 修複​

    ​pre_split_regions​

    ​​ 對分區表不生效的問題​​#18837​​
  • 修複 Hash 分區表的分區鍵為整數類型時,寫入 64 位無符号類型導緻溢出 panic 的問題​​#18186​​
  • 修複​

    ​ADMIN REPAIR TABLE​

    ​​ 無法解析 range 分區表表達式中整數的問題​​#17988​​
  • 修複​

    ​PointGet​

    ​​ 和​

    ​BatchPointGet​

    ​​ 在分區表場景下報錯的問題​​#19141​​
  • v4.0.6
  • 提升分區表的寫性能​​#19649​​
  • 修複了分區表達式檢查漏掉括号表達式的問題​​#19614​​
  • 修複了當在分區表上将​

    ​Apply​

    ​​ 轉化成​

    ​HashJoin​

    ​​ 時的錯誤結果​​#19546​​
  • 支援在 Index Join 的 inner 端使用單個分區表​​#19197​​
  • 關于 table parititon 的 PR 還可以關注下

    ​​​Table Partition Improvement for TiDB 5.0​​

繼續閱讀