区域配置
KaiwuDB 集群中,每个数据分片都隶属于一个特定的副本区域(zone)。集群在重新平衡数据分片时,会考虑副本区域的配置,以确保遵守所有约束条件。
集群启动时,会自动生成预配置的副本区域和default
副本区域。其中预配置的副本区域适用于内部系统数据,default
副本区域适用于集群中的其他数据。用户可以直接使用或调整上述副本区域,也可以为指定时序库或时序表单独设置副本区域。
表数据适用的副本区域分为以下级别:
- 集群:预配置的
default
副本区域,适用于未受指定数据库、表或行约束的数据。此区域可以调整但不能删除。 - 数据库:为指定时序库单独设置副本区域。
- 表:为指定时序表单独设置副本区域。
数据复制过程中,副本区域的优先级排序为 表 > 数据库 > 集群。
内部系统数据存储在系统数据分片内,适用于以下级别的副本区域:
- 集群级:预配置的
default
副本区域,适用于未受具体副本区域约束的系统数据。 - 系统数据分片:KaiwuDB 为
meta
和liveness
等关键系统数据分片预先设置了副本区域。用户也可以根据需要为系统数据分片配置新的副本区域。系统数据分片的副本区域修改后可能会覆盖默认设置。KaiwuDB 还为内部系统数据库和system.jobs
表配置了预设的副本区域。
用户可以使用 SHOW ZONE CONFIGURATION
语句查看指定对象及集群内的所有副本区域配置,使用 ALTER ... CONFIGURE ZONE
语句来添加、修改、重置和删除副本区域配置。
查看区域配置
SHOW ZONE CONFIGURATION
语句用于查看指定对象的副本区域信息。SHOW ZONE CONFIGURATIONS
和SHOW ALL ZONE CONFIGURATIONS
用于查看集群所有系统数据分片、system
数据库和系统表的副本信息。
所需权限
无
语法格式
参数说明
参数 | 说明 |
---|---|
range_name | 数据分片名称,包括: - default :默认副本设置- meta :所有数据的位置信息- liveness :给定时间活动节点的信息 - system :分配新表ID所需的信息以及追踪集群节点状态- timeseries :集群监控数据 |
database_name | 数据库的名称。 |
table_name | 表的名称。 |
语法示例
查看指定系统数据分片的副本信息
以下示例查看
default
默认系统数据分片的副本区域信息。SHOW ZONE CONFIGURATION FOR RANGE default;
执行成功后,控制台输出以下信息:
target | raw_config_sql ----------------+------------------------------------------- RANGE default | ALTER RANGE default CONFIGURE ZONE USING | range_min_bytes = 268435456, | range_max_bytes = 536870912, | gc.ttlseconds = 90000, | num_replicas = 3, | constraints = '[]', | lease_preferences = '[]' (1 row)
查看指定数据库的副本信息
以下示例查看
db1
数据库的副本区域信息。SHOW ZONE CONFIGURATION FOR DATABASE db1;
执行成功后,控制台输出以下信息:
target | raw_config_sql ---------------+------------------------------------------ DATABASE db1 | ALTER DATABASE db1 CONFIGURE ZONE USING | range_min_bytes = 1048576, | range_max_bytes = 8388608, | gc.ttlseconds = 100000, | num_replicas = 5, | constraints = '[]', | lease_preferences = '[]' (1 row)
查看指定表的副本区域信息
以下示例查看
t1
表的副本区域信息。SHOW ZONE CONFIGURATION FOR TABLE t1;
执行成功后,控制台输出以下信息:
target | raw_config_sql ----------------+------------------------------------------- RANGE default | ALTER RANGE default CONFIGURE ZONE USING | range_min_bytes = 268435456, | range_max_bytes = 536870912, | gc.ttlseconds = 90000, | num_replicas = 3, | constraints = '[]', | lease_preferences = '[]' (1 row)
修改区域配置
ALTER ... CONFIGURE ZONE
语句用于修改或移除数据库、表、数据分片的区域配置。
所需权限
- 修改系统数据库或系统数据数据分片
- 非三权分立模式下,用户为 Admin 用户或者 Admin 角色成员。默认情况下,root 用户具有 Admin 角色。
- 三权分立模式下,用户是
sysadmin
角色的成员。默认情况下,sysroot
用户属于sysadmin
角色。
- 修改其他库或其他库下的数据分片或表
- 非三权分立模式下,用户拥有目标对象的 CREATE 权限或 ZONECONFIG 权限。
- 三权分立模式下,用户是
sysadmin
角色的成员或者是拥有目标对象 CREATE 权限或 ZONECONFIG 权限的普通用户。默认情况下,sysroot
用户属于sysadmin
角色。
语法格式
参数说明
参数 | 说明 |
---|---|
range_name | 待修改的数据分片名称,包括: - default :默认副本设置- meta :所有数据的位置信息- liveness :给定时间活动节点的信息 - system :分配新表ID所需的信息以及追踪集群节点状态- timeseries :集群监控数据 |
database_name | 待修改的数据库名称。 |
table_name | 待修改的表名称。 |
variable | 要修改的变量名,时序库支持修改以下变量: - range_min_bytes :数据分片的最小大小,单位为字节。数据分片小于该值时,KaiwuDB 会将其与相邻数据分片合并。默认值:256 MiB,设置值应大于 1 MiB(1048576 字节),小于数据分片的最大大小。 - range_max_bytes :数据分片的最大大小,单位为字节。数据分片大于该值时,KaiwuDB 会将其切分到两个数据分片。默认值: 512 MiB。设置值不得小于 5 MiB(5242880 字节)。- gc.ttlseconds :数据在垃圾回收前保留的时间,单位为秒。默认值为 90000 (25 小时)。设置值建议不小于 600 秒(10 分钟),以免影响长时间运行的查询。设置值较小时可以节省磁盘空间,设置值较大时会增加 AS OF SYSTEM TIME 查询的时间范围。另外,由于每行的所有版本都存储在一个永不拆分的单一数据分片内,不建议将该值设置得太大,以免单行的所有更改累计超过 64 MiB,导致内存不足或其他问题。- num_replicas :副本数量。默认值为 3。system 数据库、meta 、liveness 和 system 数据分片的默认副本数为 5。 注意:集群中存在不可用节点时,副本数量不可缩减。- ts_merge.days :时序数据分片合并时间。同一个时序表同哈希点按照时间戳分裂后,超过该时间的数据分片将自动合并,且合并后不会再自动拆分。默认值:10(10天)。设置值必须大于等于 0,设置值为 0 时表示时序数据分片按照时间戳分裂后便立刻自动合并。系统数据分片数量过多导致出现网络等故障时可以将该值适当调小,以缓解数据过大的问题。提示: KaiwuDB 默认只根据哈希点拆分数据分片,因此数据分片按时间合并功能默认关闭,如需支持按时间合并数据分片,需将 kv.kvserver.ts_split_interval 实时参数设置为 1 , 将 kv.kvserver.ts_split_by_timestamp.enabled 实时参数设置为 true 以支持按照哈希点和时间戳拆分数据分片。 |
value | 变量值。 |
COPY FROM PARENT | 使用父区域的设置值。 |
DISCARD | 移除区域配置,采用默认值。 |
语法示例
修改数据库的区域配置
以下示例将
vtx
数据库的副本数改为5个,将数据在垃圾回收前保留的时间改为100000秒。> ALTER DATABASE vtx CONFIGURE ZONE USING num_replicas = 5, gc.ttlseconds = 100000; CONFIGURE ZONE 1 > SHOW ZONE CONFIGURATION FOR DATABASE vtx; zone_name | config_sql +-----------+-----------------------------------------+ vtx | ALTER DATABASE vtx CONFIGURE ZONE USING | range_min_bytes = 268435456, | range_max_bytes = 536870912, | gc.ttlseconds = 100000, | num_replicas = 5, | constraints = '[]', | lease_preferences = '[]' (6 rows)
修改表的区域配置
以下示例将
vehicles
表的副本数改为3个,将数据在垃圾回收前保留的时间改为100000秒。> ALTER TABLE vehicles CONFIGURE ZONE USING num_replicas = 3, gc.ttlseconds = 100000; CONFIGURE ZONE 1 > SHOW ZONE CONFIGURATION FOR TABLE vehicles; target | raw_config_sql ---------------+------------------------------------------ TABLE vehicles | ALTER TABLE vehicles CONFIGURE ZONE USING | range_min_bytes = 268435456, | range_max_bytes = 536870912, | gc.ttlseconds = 100000, | num_replicas = 3, | constraints = '[]', | lease_preferences = '[]' (1 row)
移除表的区域配置
以下示例恢复了
vehicles
表的默认区域配置。> ALTER TABLE vehicles CONFIGURE ZONE DISCARD; CONFIGURE ZONE 1 > SHOW ZONE CONFIGURATION FOR TABLE vehicles; target | raw_config_sql ----------------+------------------------------------------- RANGE default | ALTER RANGE default CONFIGURE ZONE USING | range_min_bytes = 268435456, | range_max_bytes = 536870912, | gc.ttlseconds = 90000, | num_replicas = 3, | constraints = '[]', | lease_preferences = '[]' (1 row)