作者:sultan8252
- 背景
自 TiDB 3.0 版本釋出以來,分區表功能就進入到各位 廣大使用者的視野中。使用使用者越來越多,同時分區表上暴露出的問題也越來越明顯,大家對分區表功能與性能上改進的呼聲也越來越高。
通過在 AskTUG 與 Github Issue以及 PR 需求,和分區表相關問題需求的整理,給出了如下表格。希望通過這個表格讓大家在使用分區表時候可以避開一些已知問題,快速的排雷高效使用 TiDB。
- 統計整理
圖檔
需求分類 | 問題 | 問題描述 | 問題 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 指定分區進行查詢 |
執行性能不佳 | 寫入分區表熱點問題 |
- Release List
- v4.0 GA
- 建立和更改表時新增檢查分區表是否使用唯一字首索引的功能#17213
- 分區表中支援
、admin check index
和admin cleanup index
#17392#17405#17317admin recover index
- 修複
開啟且聚合函數下推分區表資訊時,由于邏輯處理不正确導緻系統 panic 的問題#17328tidb_opt_agg_push_down
- 修複
開啟且聚合函數下推分區表資訊時,由于邏輯處理不正确導緻系統 panic 的問題#17328tidb_opt_agg_push_down
- v4.0.5
- 支援分區表的預打散功能#17863
- 修複
對分區表不生效的問題#18837pre_split_regions
- 修複 Hash 分區表的分區鍵為整數類型時,寫入 64 位無符号類型導緻溢出 panic 的問題#18186
- 修複
無法解析 range 分區表表達式中整數的問題#17988ADMIN REPAIR TABLE
- 修複
和PointGet
在分區表場景下報錯的問題#19141BatchPointGet
- v4.0.6
- 提升分區表的寫性能#19649
- 修複了分區表達式檢查漏掉括号表達式的問題#19614
- 修複了當在分區表上将
轉化成Apply
時的錯誤結果#19546HashJoin
- 支援在 Index Join 的 inner 端使用單個分區表#19197
-
關于 table parititon 的 PR 還可以關注下
Table Partition Improvement for TiDB 5.0