2种方式处理预切分region 区别

请教使用下面2种方案预切分region 有啥区别吗?感觉还是使用PRE_SPLIT_REGIONS 方案 更简便

1)使用split table 方法:SPLIT TABLE table_name [INDEX index_name] BETWEEN (lower_value) AND (upper_value) REGIONS region_num
2)使用 PRE_SPLIT_REGIONS 方案:create table t (a int, b int) SHARD_ROW_ID_BITS = 4 PRE_SPLIT_REGIONS=3;

第一种split table:建表后,表中已经插入大量数据,发现数据不均匀分布,且表上发生大批量写入,或者查询造成热点,针对存在热点块,对热点块进行拆分。
第二种 SHARD_ROW_ID_BITS = 4 PRE_SPLIT_REGIONS=3;是在建表的前,就已经知道这个表非常大,主键是varchar 类型或者是组合索引,为了避免造成热点块问题,提前预先拆分

2赞

第二种 预先拆分,空region没被填充满的话 会在周期内被合并掉。

1赞

第一种看描述也是预先拆分。

这个周期是多久? checkpoint的时间?

有专家能指导一下吗?

https://docs.pingcap.com/zh/tidb/stable/pd-configuration-file#split-merge-interval 这个参数控制 split 后 merge 的间隔,预计下个版本 5.3 会支持设置 split 后的表不 merge region

PRE_SPLIT_REGIONS 一般是用在建表后导入数据前提前 split 便于快速调度,split table 命令粒度更细对一段具体范围的数据或索引进行打散,适用于已知有局部热点的缓解。

如果split table是空表是否也相当于预切分regison

是的,split table 也可以对空表的 region 做预打散

因此从最佳实践来讲:相对来说空表使用pre_split_regions更简便,split table对于有数据的表。这样理解可以对吧

也可以这么理解,看哪种场景使用了