通过设置 SHARD_ROW_ID_BITS
,可以把 rowid 打散写入多个不同的 Region,缓解写入热点问题。但是设置的过大会造成 RPC 请求数放大,增加 CPU 和网络开销。
-
SHARD_ROW_ID_BITS = 4
表示 16 个分片
-
SHARD_ROW_ID_BITS = 6
表示 64 个分片
-
SHARD_ROW_ID_BITS = 0
表示默认值 1 个分片
这里的分片和region是一个概念吗?假如我有3个tikv,我会产生16个region,然后region会均匀的分配到3个tikv上?
那为什么还要搭配pre_split_regions呢?
create table test_shard (a int, b int,index idx1(a)) shard_row_id_bits = 4 pre_split_regions=2;
我已经可以用shard_row_id_bits切分region啦,那我这样还要执行pre_split_regions切分region,shard_row_id_bits和pre_split_region都是切分region?总是感觉和前面的概念混乱?可以帮忙解释下吗?
xfworld
(魔幻之翼)
2
-
SHARD_ROW_ID_BITS = 4
表示 16 个分片
-
SHARD_ROW_ID_BITS = 6
表示 64 个分片
-
SHARD_ROW_ID_BITS = 0
表示默认值 1 个分片
这三个参数是,都是以 2 X 次方来表示的
分片的单位就是region,以region 进行分片,pre_split_regions 预切分的分片数量
SHARD_ROW_ID_BITS
是以打散 Row ID 来实现 热点切分,以求避免热点读和热点写,将数据合理的分散到每个region,每个region 合理的分散到 tikv 实例中
如果你用的4.X 或者 5.X 应该已经观察到,除了聚簇索引的支持外,对于自增主键这块也有很好的支持,就是为了解决上面的热点问题
如果你的主键是其他的类型,只能依靠 打散 Row ID,实际上的效果还是比自增要差的
我这样解答,希望能帮到你!
谢谢,我不明白这句话region是怎么分布的?
create table test_shard (a int, b int,index idx1(a)) shard_row_id_bits = 4 pre_split_regions=2;
我有3个tikv,是不是这个是创建了16个分片,每个分片存在4个region均匀的分布在3个tikv上?
如果不是我的region在3个tikv上是怎么分布的呢?
xfworld
(魔幻之翼)
4
1 个赞
system
(system)
关闭
6
此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。