作者: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 指定分区进行查询

执行性能不佳

写入分区表热点问题

按天分区,非当天分区 presplit 的 region 被 merge,日期切换后形成热点

​#16667​​​ ​​#18016​

v4.0.5 交付

  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​