tidb5.0 聚集索引疑问

为提高效率,请提供以下信息,问题描述清晰能够更快得到解决:

【概述】:场景 + 问题概述

【背景】:做过哪些操作

【现象】:业务和数据库现象

【问题】:当前遇到的问题

tidb5.0的 AUTO_RANDOM 必须是聚集索引。

问题1
但原本的AUTO_RANDOM shard bits 是不是就不好使了?

问题2
我有批量归档的表 单表200G*16 的数据 存到tidb 这样就会有热点数据写入

我是继续使用 AUTO_RANDOM +聚集索引 或者 AUTO_INCREMENT+唯一索引+shard bits 那个更好一点

如果使用AUTO_RANDOM +聚集索引的话 出现了写热点问题咋处理呢

【业务影响】:

【TiDB 版本】:v5.0.2

【附件】:

1 个赞

聚集索引明确了
image

如果我批量插入到主建是随机的呢 id(1,10000,9999)这种
会重新排列嘛?(这里是指 物理存储的顺序)
改成1 9999 10000 这样

可以试试参考这个文档的回答
https://asktug.com/t/topic/93819

能够自定义序列号最简单了,参考:
https://book.tidb.io/session4/chapter6/serial-number.html

官方给的方案也可以解决:

  • AUTO_RANDOM
  • AUTO_INCREMENT
    适应的用法会有所区别,我比较懒,直接会考虑自定义序列号 :nerd_face:

5.0的聚集索引 可能会发生热点问题
而AUTO_RANDOM 本身是为了避免热点问题而产生。如果是4.0 自增类型选 AUTO_RANDOM 是没疑问的。
如果是5.0的话 选AUTO_RANDOM 会强制为聚集索引。
那么AUTO_RANDOM为了避免热点的意义就不大了。

不是很明白,聚簇索引,auto_random 和 auto_increment 不会同时使用。


比较担心的场景是什么? 举个例子,比如要创建什么样类型的表? 担心会有热点?

1.不能同时使用。
2.大批量同时写入 mysql分片 写入tidb 现在已经有50亿单表+100亿单表 的数据量写入。 担心会产生热点问题。

因为数据还会有大量的增长。 也有查询的需求

auto_random +聚簇索引 vs auto_increment 主建 那个在热点的场景更好。
5.0的版本 如使用 auto_random 为主建 则默认开启 聚集索引。
聚集索引是会有热点场景发生。

  1. auto_random 一个目的是为了解决热点问题,在业务没有使用 id 生成器产生随机 id 的情况下,作为 DB 层的解决方案帮助生成随机 id,虽然是聚簇索引,但可以起到打散写入热点的效果
  2. auto_random +聚簇索引 vs auto_increment + 唯一索引+ shard bits 的打散效果基本一样,但后者多写了一个索引,如果 mysql 迁移过来不方便改造为 auto_random,可以沿用之前的 auto_increment 并改为唯一索引;如果迁移时仍然使用 auto_increment 作为主键,为了避免热点,4.0.13 版本也支持在线将 auto_increment 主键修改为 auto_random https://github.com/pingcap/tidb/pull/24608

good 感谢老师的指点

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