【 使用环境 】 测试环境
【 OB or 其他组件 】OB
【 使用版本 】4.2.2.0
【问题描述】OBServer某节点数据盘使用量异常,其他节点低于该节点
【复现路径】select ZONE,LOG_DISK_CAPACITY,LOG_DISK_ASSIGNED,LOG_DISK_IN_USE,DATA_DISK_CAPACITY,DATA_DISK_IN_USE,DATA_DISK_HEALTH_STATUS,DATA_DISK_ALLOCATED from GV$OB_SERVERS;
±------±------------------±------------------±----------------±-------------------±-----------------±------------------------±--------------------+
| ZONE | LOG_DISK_CAPACITY | LOG_DISK_ASSIGNED | LOG_DISK_IN_USE | DATA_DISK_CAPACITY | DATA_DISK_IN_USE | DATA_DISK_HEALTH_STATUS | DATA_DISK_ALLOCATED |
±------±------------------±------------------±----------------±-------------------±-----------------±------------------------±--------------------+
| zone1 | 161061273600 | 98784247808 | 79322677248 | 483183820800 | 229499731968 | NORMAL | 483183820800 |
| zone2 | 161061273600 | 98784247808 | 79322677248 | 483183820800 | 299951456256 | NORMAL | 483183820800 |
| zone3 | 161061273600 | 98784247808 | 79322677248 | 483183820800 | 229432623104 | NORMAL | 483183820800 |
±------±------------------±------------------±----------------±-------------------±-----------------±------------------------±--------------------+
3 rows in set (0.01 sec)
其中zone2节点的DATA_DISK_IN_USE明显大于zone1和zone3.
【附件及日志】
【备注】基于 LLM 和开源文档 RAG 的论坛小助手已开放测试,在发帖时输入 [@论坛小助手 ] 即可召唤小助手,欢迎试用!
1 个赞
论坛小助手
2025 年4 月 9 日 09:47
#3
日志采集场景: 副本不均衡问题
日志采集命令: obdiag gather scene run --scene=observer.unit_data_imbalance
为了更好地帮助您定位和解决问题,请使用上述命令进行日志采集,并将采集到的日志提供给我们以便进一步分析。
另外,为了确定具体的问题,在此需要您提供一些信息:
zone2 节点的 DATA_DISK_IN_USE 具体数值是多少?其他节点的数值又是多少?
是否有最近执行的大规模数据操作(如导入、删除或更新)可能导致数据分布不均?
当前集群的分区数和副本分布情况是怎样的?
是否启用了自动负载均衡功能?如果启用,其配置参数是什么?
集群中是否有长时间运行的事务或者锁定资源的操作?
附上敏捷诊断工具 obdiag 使用帮助链接
1 个赞
五月
2025 年4 月 9 日 10:03
#5
可以查下哪类文件占的多,有没有临时文件
select * from __all_space_usage where file_type=‘tenant tmp data’;
select svr_ip,
case when d.table_type=0 then ‘DATA_MEMTABLE’
when d.table_type=1 then ‘TX_DATA_MEMTABLE’
when d.table_type=2 then ‘TX_CTX_DATA_MEMTABLE’
when d.table_type=3 then ‘LOCK_MEMTABLE’
when d.table_type=10 then ‘MAJOR_SSTABLE’
when d.table_type=11 then ‘MINOR_SSTABLE’
when d.table_type=12 then ‘MINI_SSTABLE’
when d.table_type=13 then ‘META_MAJOR_SSTABLE’
when d.table_type=14 then ‘DDL_DUMP_SSTABLE’
when d.table_type=15 then ‘REMOTE_LOGICAL_MINOR_SSTABLE’
when d.table_type=16 then ‘DDL_MEM_SSTABLE’
ELSE ‘UNKNOW’
end as table_type
,round(sum(d.size/1024/1024/1024),2) as size_g,round(sum(d.data_block_count*2/1024),2) as block_size_g
from __all_virtual_table_mgr d group by svr_ip,table_type;
1 个赞
mysql> select * from __all_space_usage where file_type=‘tenant tmp data’;
±---------------------------±---------------------------±----------±--------------±---------±----------±----------------±----------±----------+
| gmt_create | gmt_modified | tenant_id | svr_ip | svr_port | start_seq | file_type | data_size | used_size |
±---------------------------±---------------------------±----------±--------------±---------±----------±----------------±----------±----------+
| 2024-06-16 07:44:00.106594 | 2024-12-27 16:19:30.717841 | 1 | 10.202.12.41 | 12882 | 1 | tenant tmp data | 0 | 0 |
| 2024-07-03 08:05:50.665752 | 2025-03-21 00:57:25.470107 | 1 | 10.202.12.42 | 12882 | 2 | tenant tmp data | 0 | 0 |
| 2025-01-20 12:46:36.684248 | 2025-01-20 12:46:36.684248 | 1 | 10.202.12.43 | 12882 | 3 | tenant tmp data | 0 | 0 |
| 2024-06-12 16:43:03.684117 | 2025-03-06 07:55:28.813307 | 1002 | 10.202.12.41 | 12882 | 1 | tenant tmp data | 0 | 0 |
| 2024-06-12 16:44:49.940534 | 2024-06-12 16:44:49.940534 | 1002 | 10.202.12.42 | 12882 | 2 | tenant tmp data | 0 | 0 |
| 2024-06-12 16:46:23.232022 | 2024-06-12 16:46:23.232022 | 1002 | 10.202.12.43 | 12882 | 3 | tenant tmp data | 0 | 0 |
| 2024-12-04 21:17:45.244885 | 2025-03-13 10:56:26.752185 | 1014 | 10.202.12.41 | 12882 | 1 | tenant tmp data | 0 | 0 |
| 2024-12-04 14:46:51.016578 | 2024-12-10 18:22:05.986383 | 1014 | 10.202.12.42 | 12882 | 2 | tenant tmp data | 0 | 0 |
| 2024-12-04 14:39:07.630644 | 2024-12-12 09:35:30.951611 | 1014 | 10.202.12.43 | 12882 | 3 | tenant tmp data | 0 | 0 |
±---------------------------±---------------------------±----------±--------------±---------±----------±----------------±----------±----------+
9 rows in set (0.00 sec)
mysql> select svr_ip,
→ case when d.table_type=0 then ‘DATA_MEMTABLE’
→ when d.table_type=1 then ‘TX_DATA_MEMTABLE’
→ when d.table_type=2 then ‘TX_CTX_DATA_MEMTABLE’
→ when d.table_type=3 then ‘LOCK_MEMTABLE’
→ when d.table_type=10 then ‘MAJOR_SSTABLE’
→ when d.table_type=11 then ‘MINOR_SSTABLE’
→ when d.table_type=12 then ‘MINI_SSTABLE’
→ when d.table_type=13 then ‘META_MAJOR_SSTABLE’
→ when d.table_type=14 then ‘DDL_DUMP_SSTABLE’
→ when d.table_type=15 then ‘REMOTE_LOGICAL_MINOR_SSTABLE’
→ when d.table_type=16 then ‘DDL_MEM_SSTABLE’
→ ELSE ‘UNKNOW’
→ end as table_type
→ ,round(sum(d.size/1024/1024/1024),2) as size_g,round(sum(d.data_block_count*2/1024),2) as block_size_g
→ from __all_virtual_table_mgr d group by svr_ip,table_type;
±--------------±---------------------±-------±-------------+
| svr_ip | table_type | size_g | block_size_g |
±--------------±---------------------±-------±-------------+
| 10.202.12.41 | MAJOR_SSTABLE | 181.77 | 212.38 |
| 10.202.12.41 | DATA_MEMTABLE | 1.80 | 0.00 |
| 10.202.12.41 | MINI_SSTABLE | 0.27 | 0.49 |
| 10.202.12.41 | TX_CTX_DATA_MEMTABLE | 0.00 | 0.00 |
| 10.202.12.41 | MINOR_SSTABLE | 1.74 | 1.95 |
| 10.202.12.41 | TX_DATA_MEMTABLE | 0.37 | 0.00 |
| 10.202.12.41 | LOCK_MEMTABLE | 0.00 | 0.00 |
| 10.202.12.42 | MAJOR_SSTABLE | 181.77 | 212.38 |
| 10.202.12.42 | DATA_MEMTABLE | 1.76 | 0.00 |
| 10.202.12.42 | MINI_SSTABLE | 0.41 | 0.63 |
| 10.202.12.42 | TX_CTX_DATA_MEMTABLE | 0.00 | 0.00 |
| 10.202.12.42 | MINOR_SSTABLE | 1.72 | 1.92 |
| 10.202.12.42 | TX_DATA_MEMTABLE | 0.39 | 0.00 |
| 10.202.12.42 | LOCK_MEMTABLE | 0.00 | 0.00 |
| 10.202.12.43 | MAJOR_SSTABLE | 181.77 | 212.38 |
| 10.202.12.43 | DATA_MEMTABLE | 1.73 | 0.00 |
| 10.202.12.43 | MINI_SSTABLE | 0.46 | 0.69 |
| 10.202.12.43 | TX_CTX_DATA_MEMTABLE | 0.00 | 0.00 |
| 10.202.12.43 | MINOR_SSTABLE | 1.50 | 1.67 |
| 10.202.12.43 | TX_DATA_MEMTABLE | 0.39 | 0.00 |
| 10.202.12.43 | LOCK_MEMTABLE | 0.00 | 0.00 |
±--------------±---------------------±-------±-------------+
21 rows in set, 1 warning (0.04 sec)
1 个赞
论坛小助手
2025 年4 月 9 日 10:24
#9
根据您提供的信息,我们可以从以下几个方面来分析和解答您的问题:
1. 关于 OBServer 某节点数据盘使用量异常
您提到 zone2
节点的 DATA_DISK_IN_USE
明显大于其他节点。这可能与以下因素有关:
副本分布不均 :某些分区的副本可能集中在 zone2
节点上。
临时数据或内存表占用 :虽然查询结果显示 tenant tmp data
的 used_size
为 0,但可能存在未释放的临时数据或内存表。
SSTable 分布 :从查询结果来看,MAJOR_SSTABLE
的大小在各个节点上是相同的(181.77 GB),但其他类型的 SSTable 可能存在差异。
2. 关于 4.2.2.0 版本对副本均衡优化的问题
OceanBase 社区版 4.2.2.0 在副本均衡方面已经做了较多优化,但仍可能存在以下情况导致副本不均衡:
负载均衡策略 :默认情况下,OceanBase 使用基于资源利用率的负载均衡策略。如果某些节点的资源利用率较低,可能会导致新创建的分区优先分配到这些节点上。
历史数据分布 :如果集群在升级到 4.2.2.0 之前就已经存在副本分布不均的情况,升级后可能不会立即重新分布。
手动干预 :如果有手动调整分区分布的操作(如通过 ALTER TABLE ... SPLIT PARTITION
或 ALTER SYSTEM BALANCE LEADER
),可能导致副本分布不均。
3. 解决方案建议
以下是针对您问题的具体解决步骤:
(1)检查副本分布
运行以下 SQL 查询分区的副本分布情况:
SELECT partition_id, COUNT(*) AS replica_count, LISTAGG(svr_ip, ',') WITHIN GROUP (ORDER BY svr_ip) AS replica_ips
FROM __all_virtual_clog_stat
GROUP BY partition_id
HAVING COUNT(*) > 1;
此查询可以帮助您确认是否存在某些分区的副本集中分布在 zone2
节点上的情况。
(2)触发负载均衡
您可以尝试手动触发负载均衡操作:
ALTER SYSTEM BALANCE UNIT LOAD;
此命令会重新评估集群中各节点的资源利用率,并尝试将副本迁移到更合适的节点上。
(3)检查临时数据占用
尽管查询结果显示 tenant tmp data
的 used_size
为 0,但仍需进一步确认是否有未释放的临时数据。可以运行以下命令清理临时数据:
ALTER SYSTEM CLEAN TEMPORARY DATA;
(4)检查 SSTable 分布
从查询结果来看,MAJOR_SSTABLE
的大小在各个节点上是相同的,但其他类型的 SSTable 可能存在差异。您可以运行以下命令查看详细分布情况:
SELECT table_type, svr_ip, SUM(size) AS total_size
FROM __all_virtual_table_mgr
GROUP BY table_type, svr_ip
ORDER BY table_type, svr_ip;
(5)升级到更高版本
如果您发现 4.2.2.0 版本确实存在副本均衡方面的不足,可以考虑升级到更高版本(如 4.3.x)。OceanBase 社区版的后续版本在副本均衡和负载均衡策略上进行了更多优化。
4. 总结
根据文档库中的信息和您的实际查询结果:
副本分布不均可能是导致 zone2
节点数据盘使用量异常的主要原因。
OceanBase 社区版 4.2.2.0 已经对副本均衡进行了优化,但在某些特定场景下仍可能存在不足。
建议您按照上述步骤逐一排查并解决问题,必要时可升级到更高版本以获得更好的均衡效果。
如果问题仍未解决,请提供以下信息以便进一步分析:
集群的分区数和副本分布情况。
是否有手动调整分区分布的操作记录。
集群中是否存在长时间运行的事务或锁定资源的操作。
更多信息请查看:
联接算法
恢复回收站对象
(小助手的答复已结束,如未能解决您的问题,请继续提问并等待其他同学的回复,谢谢!)
1 个赞
辞霜
2025 年4 月 9 日 10:37
#10
该版本已不进行维护了建议升级,也有可能是触发什么bug了,使用小助手提供的sql查询下看看所有表的sstable大小不同zone内是否一致
SELECT table_type, svr_ip, SUM(size) AS total_size
FROM __all_virtual_table_mgr
GROUP BY table_type, svr_ip
ORDER BY table_type, svr_ip;
1 个赞
SELECT table_type, svr_ip, SUM(size) AS total_size
→ FROM __all_virtual_table_mgr
→ GROUP BY table_type, svr_ip
→ ORDER BY table_type, svr_ip;
±-----------±--------------±-------------+
| table_type | svr_ip | total_size |
±-----------±--------------±-------------+
| 0 | 10.202.12.41 | 790626304 |
| 0 | 10.202.12.42 | 744488960 |
| 0 | 10.202.12.43 | 719323136 |
| 1 | 10.202.12.41 | 466247936 |
| 1 | 10.202.12.42 | 491367296 |
| 1 | 10.202.12.43 | 491363456 |
| 2 | 10.202.12.41 | 0 |
| 2 | 10.202.12.42 | 0 |
| 2 | 10.202.12.43 | 0 |
| 3 | 10.202.12.41 | 0 |
| 3 | 10.202.12.42 | 0 |
| 3 | 10.202.12.43 | 0 |
| 10 | 10.202.12.41 | 195175805324 |
| 10 | 10.202.12.42 | 195175805324 |
| 10 | 10.202.12.43 | 195175805324 |
| 11 | 10.202.12.41 | 2162577688 |
| 11 | 10.202.12.42 | 1900689227 |
| 11 | 10.202.12.43 | 1950844225 |
| 12 | 10.202.12.41 | 169024426 |
| 12 | 10.202.12.42 | 555062285 |
| 12 | 10.202.12.43 | 328947678 |
±-----------±--------------±-------------+
21 rows in set (0.03 sec)
如果要升级的话,升级到哪个版本最好。4.2现在不能平滑升级到4.3吧?
升级后副本会自动解决负载不均衡的问题,还是需要再手动执行ALTER SYSTEM BALANCE UNIT LOAD;等操作
淇铭
2025 年4 月 11 日 15:30
#19
命令应该有问题 小助手联想的 先升级吧 这个版本不维护了 即使触碰到了bug也不在修复了 也都是建议升级
后续重启服务器也解决了。。。感觉是版本bug。。。准备升级最新版本了