一个表建立之后,不管多少个 tikv 节点也只有一个region 吗? 只有随着数据量的增多,才会分裂吧?

【 TiDB 使用环境】生产环境 /测试/ Poc
【 TiDB 版本】
【复现路径】做过哪些操作出现的问题
【遇到的问题:问题现象及影响】
一个表建立之后,不管多少个 tikv 节点也只有一个region 吗?这时候读写性能都受限于单个region 的性能吧?
【资源配置】
【附件:截图/日志/监控】

region是逻辑概念,和虚拟内存似的,把key空间划分成一段段的,由于数据不断写入,当region内key的大小近似值达到最大参数约束值后就会分裂,而不是分裂后导致写入,分裂后仅是一些管理元数据的变化,不影响下层rocksdb ,另外在写表数据时,还有索引、lock、raft log等数据都要写到磁盘上

不同 region 之间才能并行吧?一个region 对应一个 raft group, 每个 raft group 就是串行处理?是这么理解的吧?谢谢

每个 Region 负责维护集群的一段连续数据(默认配置下平均约 96 MiB),每份数据会在不同的 Store 存储多个副本(默认配置是 3 副本),每个副本称为 Peer。同一个 Region 的多个 Peer 通过 raft 协议进行数据同步,所以 Peer 也用来指代 raft 实例中的成员。TiKV 使用 multi-raft 模式来管理数据,即每个 Region 都对应一个独立运行的 raft 实例,我们也把这样的一个 raft 实例叫做一个 Raft Group。

那么加入用户写入数据的key 是比较随机的,那么刚开始只有一个region, 后面写入增多,可以变为 100个region ,那么100个region 时候的整体读写性能是,刚开始只有一个region 时候的 100 倍?

region如果是三副本新建表,一个region会出现三个tikv上 show table xxx regions能具体看到分布。至于建表后有几个region,和一些参数有关

region并不是越多越好 在大量数据的场景下,可能会出现 Region 数量过多,从而带来更多的资源开销和导致性能回退的问题。

吞吐量的上限,受tikv数量和磁盘吞吐量的约束。
不一定是100倍,这100个region在tikv分布的越平均,每个tikv的磁盘吞吐量越大。性能肯定越好。

我自己的测试就是,每个tikv独立存储的情况下,4tikv比3tikv大致提升1/3写吞吐量。

CREATE TABLE t (c int PRIMARY KEY NONCLUSTERED) SHARD_ROW_ID_BITS = 4 pre_split_regions = 2;
可以用pre_split_regions来在建表成功后就开始预均匀切分region
Split Region 使用文档 | PingCAP 文档中心

1 个赞

数据会被分配到不同的Region中,每个TiKV节点都负责管理一部分Region,一个表可能会被分布在多个TiKV节点上。但每个Region只有一个leader节点,该节点负责处理对该Region的读写请求,如果一个表中只有一个Region,那么读写性能会受到该Region的限制,当region的负载过重,会导致性能下降