【 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线程
小结一下:针对该问题目前没有找到合适的解决方案,只能从下面几点考虑
- 当前只能提升机器的性能来回去更高的tps
- 自己实现自增ID
- 限流削峰
此话题已在最后回复的 60 天后被自动关闭。不再允许新回复。