如何将 keys 均匀分布在各个region ?

如下最后结果, keys 没有均匀分布在各个region

select count(1) from customer2; – 25000

select min(_tidb_rowid),max(_tidb_rowid) from customer2; – 8646911284551352321 , 8646911284551377320

split table customer2 between (8646911284551352321) and (8646911284551377320) regions 16;

SELECT
c.address,
sum(APPROXIMATE_KEYS),
count(1)
FROM
INFORMATION_SCHEMA.TIKV_REGION_STATUS s
JOIN INFORMATION_SCHEMA.TIKV_REGION_PEERS p ON s.REGION_ID = p.REGION_ID
JOIN INFORMATION_SCHEMA.TIKV_STORE_STATUS C ON P.store_id = c.store_id
WHERE
TABLE_NAME = ‘customer2’
AND p.is_leader = 1
AND APPROXIMATE_KEYS > 0
AND is_index = 0
group by c.address
order by 1;

±---------------------±----------------------±---------+
| address | sum(APPROXIMATE_KEYS) | count(1) |
±---------------------±----------------------±---------+
| 192.168.145.82:20160 | 8597 | 6 |
| 192.168.145.83:20160 | 19778 | 6 |
| 192.168.145.84:20160 | 8170 | 6 |
±---------------------±----------------------±---------+
3 rows in set (0.10 sec)

技术文档从来没说过均匀分配呀。tidb分region的策略是保证每个region对于key的范围差是相等的,并不是数量均匀分布。

keys 随机分裂和合并的,受定义值的影响,参考这儿:
https://docs.pingcap.com/zh/tidb/stable/tidb-storage#region

因为要支持海量数据,对于region 的处理是要收到有效的调度才能持续,这一点需要参考:

  • 存储
  • 计算
  • 调度

三个方面的视角结合来看,希望对你有帮助

1 个赞

自动的,不能手工干预

目前 PD 的 leader 和 region 调度都是按 store 去均衡的,没有考虑到表级别的均衡,split 语句在切分后是会有个打散到各个 stroe 的操作,主要是为了减少热点,可能也没那么均衡

在表比较大的场景scatter-range-scheduler有一定效果。

你都自增列了怎么可能均匀,数据肯定连续的

没有说过这个要均匀分配在各region,是大体均匀在各tikv中吧

简单说拷pd调度,复杂说的懂,不得是首屈一指的专家。

自动分配的,分布式的数据库必须是自动分配哦。