oceanbase tablet大小是动态调整的吗?

根据文档库中的信息,关于 分区(Partition)与分片(Tablet)的关系 可以总结如下:

分区与 Tablet 的关系

  1. 单分区表

    • 单分区表会创建一个 Tablet。因此,在这种情况下,分区和 Tablet 是 1:1 的关系。
  2. 多分区表

    • 对于多分区表,每个分区都会创建一个独立的 Tablet。因此,在这种情况下,一张表可以有多个 Tablet,即表和 Tablet 是 1:N 的关系,但每个分区和 Tablet 仍然是 1:1 的关系。

Tablet 的大小及动态调整

  1. 默认大小

    • 根据官方文档,Tablet 默认大小为 128MB。这是指 Tablet 内部的数据存储结构(如 MemTable、SSTable 等)在达到一定阈值时会触发转储或合并操作,但并不是说 Tablet 的物理大小固定为 128MB。
  2. 动态调整

    • 在某些特定场景下,OceanBase 支持根据宏块负载和数据分布动态调整 Tablet 的大小限制。例如,在批量导入场景中,可以适当增大 Tablet 的大小限制以减少分裂频率;而在高并发查询场景中,可以适当减小 Tablet 的大小限制以提高查询并行度。然而,这种调整通常是通过配置参数或系统优化实现的,并不是 Tablet 的物理大小会自动变化。
  3. 自动分裂

    • 当 Tablet 达到一定大小或满足其他条件时,OceanBase 会自动将 Tablet 进行分裂,以确保数据均衡和性能优化。这并不意味着 Tablet 的大小会动态调整,而是通过分裂生成新的 Tablet 来管理更多的数据。

综合理解

  • 分区与 Tablet 的关系:无论是单分区表还是多分区表,每个分区和 Tablet 都是 1:1 的关系。对于多分区表,表和 Tablet 是 1:N 的关系。
  • Tablet 的大小:虽然有默认大小(128MB),但实际大小会根据数据量和系统配置动态变化。动态调整指的是通过配置参数或系统优化来适应不同场景的需求,而不是 Tablet 的物理大小会自动改变。

希望这些信息能帮助您更好地理解分区与 Tablet 的关系以及 Tablet 的大小管理机制。如果还有其他问题,请随时提问。

详情请参考:

  1. OceanBase 术语
  2. 集群架构
  3. 日志流和副本概述
  4. 分区概述
  5. OceanBase 数据库
  6. 数据分布
  7. 使用 OceanBase 数据库分区表进行水平拆分
1 个赞

谢谢,就以这个为准了。

分区分裂

用户在 CREATE TABLE 时, 可以使用 SIZE(num) 来创建阈值为 num 的自动分区表,当自动分区表的 tablet 大小超过阈值时,其 tablet 就会进行分裂。
举例:
–创建自动分区表的非分区表,当分区所占磁盘空间大于 1G 时会自动分裂
CREATE TABLE auto_pt1 (c1 int auto_increment, c2 int, primary key(c1))
PARTITION BY RANGE (c1) SIZE(‘1GB’);

–创建自动分区的分区表,当分区所占磁盘空间大于 10G 时会自动分裂
CREATE TABLE auto_pt2 (c1 int auto_increment, c2 int, primary key(c1))
PARTITION BY RANGE(c1) SIZE(‘10GB’)(
PARTITION p0 VALUES LESS THAN (30),
PARTITION p1 VALUES LESS THAN (40),
PARTITION p2 VALUES LESS THAN (MAXVALUE)
);
–创建自动分区的非分区表时,可以省略分区键
CREATE TABLE auto_pt2 (c1 int auto_increment, c2 int, primary key(c1))
PARTITION BY RANGE() SIZE(‘1GB’);

–创建自动分区表时,可以省略SIZE,使用租户默认配置设置分裂阈值
CREATE TABLE auto_pt3 (c1 int auto_increment, c2 int, primary key(c1))
PARTITION BY RANGE();

–创建非自动分区表
CREATE TABLE non_auto_pt (c1 int auto_increment, c2 int, primary key(c1))
PARTITION BY RANGE() SIZE(‘unlimited’);

,当 auto_pt1 的 tablet 大小超过 1G 时,其 tablet 就会自动分裂为 2 个新的 tablet,auto_pt1 将会由非分区表转化为具有两个一级分区的一级分区表。然后,每当 auto_pt1 的 tablet 大小超过阈值时,其 tablet 就会进行分裂,生成两个新的一级分区。

在 mysql 模式下,用户同样也可以通过 ALTER TABLE … REORGANIZE PARTITION 语法手动指定某个分区需要分裂,并自行给定分裂位点。例如:
CREATE TABLE t1 (id INT, dob DATE, primary key(id))
PARTITION BY RANGE(id) (
PARTITION p0 VALUES LESS THAN (30),
PARTITION p1 VALUES LESS THAN (40),
PARTITION p2 VALUES LESS THAN (50)
);

–分裂一级分区
ALTER TABLE t1 REORGANIZE PARTITION p2 INTO (
PARTITION p1_2 VALUES LESS THAN (45),
PARTITION p2 VALUES LESS THAN (50)
);


https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000002016858

1 个赞

这个回答

其实矛盾点就是,既然分区和tablet是1:1的关系,何来tablet大小和分裂之说呢?
因为既然是1:1的关系,分区多少数据,底层承载数据存储的tablet 就要存储多少数据。

对于多分区来说分裂 单分区表其实就是非分区表 你看看上面我的举例还有文档你可以看看

我理解他的分裂就是转储了。

不是转储,是自动分区。自动分区,就解释的通了