如何查看 OceanBase 集群中主副本分布,写出查询视图。
OceanBase 里“主副本”通常指 Leader 副本 ,也就是负责写请求和强一致性读的副本。
查看主副本分布时,4.x 版本优先用 DBA_OB_* / CDB_OB_* 视图 ,不要直接依赖 __all_virtual_* 内部表。
4.x 推荐视图
表格
| 视图 | 适用租户 | 用途 |
|---|---|---|
DBA_OB_TABLE_LOCATIONS |
普通租户 | 查看表/分区的副本分布、ROLE 是否为 LEADER
|
CDB_OB_TABLE_LOCATIONS |
sys 租户 | 查看所有租户的表/分区副本分布 |
DBA_OB_LS_LOCATIONS / CDB_OB_LS_LOCATIONS
|
普通租户 / sys 租户 | 查看日志流副本分布,日志流层面也有 Leader/Follower |
DBA_OB_TABLET_REPLICAS / CDB_OB_TABLET_REPLICAS
|
普通租户 / sys 租户 | 查看 Tablet 副本状态、大小、角色等详细信息 |
常用查询示例
1. 查看某张表的主副本分布
sql
编辑
SELECT DATABASE_NAME,
TABLE_NAME,
SVR_IP,
SVR_PORT,
ZONE,
ROLE,
LS_ID,
TABLET_ID
FROM oceanbase.DBA_OB_TABLE_LOCATIONS
WHERE DATABASE_NAME = 'your_db'
AND TABLE_NAME = 'your_table'
AND ROLE = 'LEADER';
2. 按节点统计某租户的 Leader 分布
sql
编辑
SELECT ZONE,
SVR_IP,
COUNT(*) AS leader_count
FROM oceanbase.CDB_OB_TABLE_LOCATIONS
WHERE TENANT_ID = 1001
AND ROLE = 'LEADER'
GROUP BY ZONE, SVR_IP
ORDER BY ZONE, SVR_IP;
3. 查看某张表的完整副本分布
sql
编辑
SELECT t1.DATABASE_NAME,
t1.TABLE_NAME,
t1.SVR_IP,
t1.SVR_PORT,
t1.ZONE,
t1.ROLE,
t2.REPLICA_TYPE,
t2.REPLICA_STATUS
FROM oceanbase.DBA_OB_TABLE_LOCATIONS t1
JOIN oceanbase.DBA_OB_TABLET_REPLICAS t2
ON t1.TENANT_ID = t2.TENANT_ID
AND t1.LS_ID = t2.LS_ID
AND t1.TABLET_ID = t2.TABLET_ID
AND t1.SVR_IP = t2.SVR_IP
AND t1.SVR_PORT = t2.SVR_PORT
WHERE t1.DATABASE_NAME = 'your_db'
AND t1.TABLE_NAME = 'your_table';
3.x 老版本可用视图
如果是 3.x 版本 ,可以查:
sql
编辑
SELECT TENANT_ID,
TABLE_ID,
PARTITION_ID,
SVR_IP,
ZONE,
ROLE
FROM oceanbase.__ALL_VIRTUAL_META_TABLE
WHERE TABLE_ID = :table_id
AND ROLE = 1;
其中 ROLE = 1 表示 Leader。
实际使用时,如果集群是 4.x,建议优先用 CDB_OB_TABLE_LOCATIONS / DBA_OB_TABLE_LOCATIONS ;如果是 3.x,再用 __ALL_VIRTUAL_META_TABLE 。