SHARD_ROW_ID_BITS是不是非聚簇表按_tidb_rowid的hash打散的2^n桶数?为什么我设置为4了还是只占一个region?
set @@cte_max_recursion_depth =100000;
drop table t1;
CREATE TABLE t1 (c int,c2 varchar(100)) SHARD_ROW_ID_BITS = 4;
insert into t1
WITH RECURSIVE nr(n) AS
(SELECT 1
UNION ALL SELECT n + 1
FROM nr WHERE n < 100000
) SELECT n,'abcdefgabcdefgabcdefgabcdefgabcdefg' FROM nr;
这样只查到一个region:
SHOW TABLE t1 regions;
REGION_ID|START_KEY|END_KEY |LEADER_ID|LEADER_STORE_ID|PEERS |SCATTERING|WRITTEN_BYTES|READ_BYTES|APPROXIMATE_SIZE(MB)|APPROXIMATE_KEYS|SCHEDULING_CONSTRAINTS|SCHEDULING_STATE|
---------+---------+--------+---------+---------------+------------+----------+-------------+----------+--------------------+----------------+----------------------+----------------+
52|t_125_ |78000000| 53| 1|53, 174, 238| 0| 27112746| 1515420| 71| 623656| | |
select _tidb_rowid,c,c2 from t1;
_tidb_rowid |c |c2 |
-------------------+---+-----------------------------------+
8070450532247928833| 1|abcdefgabcdefgabcdefgabcdefgabcdefg|
8070450532247928834| 2|abcdefgabcdefgabcdefgabcdefgabcdefg|
8070450532247928835| 3|abcdefgabcdefgabcdefgabcdefgabcdefg|
...
查到了,还要加pre_split_regions属性:
CREATE TABLE t1 (c int,c2 varchar(100))
SHARD_ROW_ID_BITS = 4 pre_split_regions=2;
1 个赞
SHARD_ROW_ID_BITS 参数的作用就是定义了 ROW_ID 中用于表示分片 ID 的位数,帮助 TiDB 进行分片表的数据分布和管理。
1 个赞
SHARD_ROW_ID_BITS 参数的作用就是定义了 ROW_ID 中用于表示分片 ID 的位数,注意它是2的冪数
手动挡,,
手动切换 region 数据的分片,避免出现热点问题…
学习了,建表时进行预拆分
菜鸟路过学习一下。
主要避免写热点,必须业务是顺序写,但是打散后,读的性能也会有下降,这需要自己平衡了
提升写入性能,避免只写一个region造成特点,注意这个只能在建表阶段做
必须要加这个参数吗? 是不是数据量大的时候SHARD_ROW_ID_BITS = 4 才会按2的4次方分region?
我插了几十万还在一个region上
感谢各位的回复🙏
SHARD_ROW_ID_BITS 用于将 _tidb_rowid 列生成的行 ID 随机打散。PRE_SPLIT_REGIONS 用于在建完表后预先进行 Split region。
示例:
--PRE_SPLIT_REGIONS 的值必须小于或等于 SHARD_ROW_ID_BITS。
create table t (a int, b int) SHARD_ROW_ID_BITS = 4 PRE_SPLIT_REGIONS=3;
-
SHARD_ROW_ID_BITS = 4表示 tidb_rowid 的值会随机分布成 16 (16=2^4) 个范围区间。 -
PRE_SPLIT_REGIONS=3表示建完表后提前切分出 8 (2^3) 个 Region。
开始写数据进表 t 后,数据会被写入提前切分好的 8 个 Region 中,这样也避免了刚开始建表完后因为只有一个 Region 而存在的写热点问题。
是的,这个打散虽然避免了写热点,一定程度提升了写性能,但是读的性能也会明显下降,这也是我们一直没有使用该参数的原因,很难权衡利弊。
菜鸟路过学习下
使用AUTO_RANDOM,立竿见影看到数据分布在多个region里
此话题已在最后回复的 60 天后被自动关闭。不再允许新回复。
