分区数量偏差大于1会触发均衡。
假如有三个日志流
LS_ID 分区数量
1001 10
1002 11
1003 12
LS_ID 分区数量 日志流占用磁盘大小(假如使用量大于50G)
1001 10 10%
1002 10 11%
1003 10 12%
请问下老师 以上情况下会触发均衡吗
是用最大值和最小值进行比较吗
LS_ID 分区数量 日志流占用磁盘大小(假如使用量大于50G)
1001 10 10%
1002 10 11%
1003 10 12%
请问下老师 以上情况下会触发均衡吗
是用最大值和最小值进行比较吗
根据文档库中的信息,我们可以从以下几个方面来解答您的问题:
根据您提供的图片内容以及文档片段的信息,分区数量均衡的目标是让租户的所有日志流上的用户表主表分区数量均匀(数量偏差不大于 1)。因此,当某个日志流的分区数量与其他日志流相比偏差大于 1 时,会触发均衡。
在您的第一个场景中:
可以看到,LS_ID 1003 的分区数量比 LS_ID 1001 多了 2 个,超过了允许的偏差范围(1),因此在这种情况下会触发分区数量均衡。
对于第二个场景,虽然分区数量相同(均为 10 个),但日志流占用的磁盘大小不同:
根据文档片段 7 的描述,分区磁盘均衡主要通过视图 CDB_OB_TABLET_REPLICAS
中的 data_size
字段来判断。如果某个日志流的磁盘使用量显著高于其他日志流,则可能会触发磁盘均衡操作。
然而,文档中并未明确说明磁盘均衡的具体触发阈值。通常情况下,OceanBase 数据库会综合考虑分区数量和磁盘使用情况来进行均衡。如果仅是轻微的磁盘使用差异(如 10%、11%、12%),可能不会立即触发均衡;但如果磁盘使用差异较大(例如某些日志流占用远超平均值),则会触发均衡。
根据文档片段 1 和图片内容,分区数量均衡确实是以最大值和最小值之间的偏差为依据。如果最大值与最小值之间的偏差超过 1,则会触发均衡。
对于磁盘均衡,虽然没有明确说明是否直接使用最大值和最小值进行比较,但从逻辑上推测,OceanBase 数据库可能会计算各日志流的磁盘使用量差异,并设定一个阈值。如果某个日志流的磁盘使用量超出该阈值,则会触发均衡。
如果您需要进一步确认具体的磁盘均衡阈值,可以参考以下 SQL 查询分区磁盘均衡情况:
SELECT a.svr_ip, a.svr_port, b.ls_id, SUM(data_size)/1024/1024/1024 AS total_data_size
FROM oceanbase.CDB_OB_TABLET_REPLICAS a, oceanbase.CDB_OB_TABLE_LOCATIONS b
WHERE a.tenant_id = b.tenant_id
AND a.svr_ip = b.svr_ip
AND a.svr_port = b.svr_port
AND a.tablet_id = b.tablet_id
AND b.role = 'leader'
AND b.table_type = 'USER TABLE'
AND a.tenant_id = xxxx
GROUP BY svr_ip, svr_port, ls_id;
希望以上解答对您有所帮助!如果还有其他疑问,请随时提问。
详情请参考:
关于第二个案例,培训材料写的是磁盘使用量差值超过配置项server_balance_disk_tolerance_percent的值会触发,该配置项的默认是是1,也就是超过1%会触发,请再确认一下,是否也是计算最大值和最小值的差值。
分区均衡策略的优先级顺序如下:分区属性对齐(table group对齐) > 分区数量均衡 > 分区磁盘均衡
假如有三个日志流
LS_ID 分区数量
1001 10
1002 11
1003 12
这里会进行均衡。
LS_ID 分区数量 日志流占用磁盘大小(假如使用量大于50G)
1001 10 10%
1002 10 11%
1003 10 12%
这里负载均衡会计算是否存在均衡后磁盘大小便差更小。如果不存在则不会进行均衡
好的老师 也就是说不考虑 table group 假设分区数量一致
这种情况是符合均衡的初步条件 但他会进一步计算均衡后 如果效果比当前更差 那么就不会均衡,如果均衡后效果会更好就会均衡
是的