- 背景
自 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 指定分区进行查询 |
执行性能不佳 | 写入分区表热点问题 | 按天分区,非当天分区 presplit 的 region 被 merge,日期切换后形成热点 | #16667 #18016 | v4.0.5 交付 |
-
Release List
-
v4.0 GA
-
v4.0.5
-
v4.0.6
-
- 关于 table parititon 的 PR 还可以关注下
Table Partition Improvement for TiDB 5.0