使用hash分区,为什么写入的数据还是在一个分区表上呢

【 TiDB 使用环境】测试
【 TiDB 版本】
【复现路径】自增id作为主键会出现写热点问题。需要保留自增id作为主键,考虑通过hash分区。手动插入四条数据。这四条确实在四个分区表上。然后使用systembech压测。结果大量的写入在一个分区表,且自增id是4,8,12…
为什么是这样的呢?如果需要保留自增id作为主键,这种写热点还有什么好的解决办法吗?

可以使用auto_random解决

random

如果需要使用自增字段,根据时间顺序排序。不如使用时间戳。 tidb建议使用auto_random,避免热点。

这种写热点好像没法避免,要不分区数多一些试一下

auto_random

用的hash分区,结果还是写道一个分区表上了

auto_random

auto_random

auto random是首选。

做不到就只能是

CREATE TABLE t (
Id int(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (Id) /*T![clustered_index] NONCLUSTERED */,
) ENGINE=InnoDB /*T! SHARD_ROW_ID_BITS=3 PRE_SPLIT_REGIONS=2 */

/*T![clustered_index] NONCLUSTERED */ 非聚簇表
/*T! SHARD_ROW_ID_BITS=3 PRE_SPLIT_REGIONS=2 */

https://docs.pingcap.com/zh/tidb/stable/troubleshoot-hot-spot-issues#使用-shard_row_id_bits-处理热点表

auto_random

写入热点和分不分区关系不大,还是auto_random

单线程单连接测试的吗

auto_random

不是 sysbench 测试的,配置为64线程

小结一下:针对该问题目前没有找到合适的解决方案,只能从下面几点考虑

  1. 当前只能提升机器的性能来回去更高的tps
  2. 自己实现自增ID
  3. 限流削峰

此话题已在最后回复的 60 天后被自动关闭。不再允许新回复。