如何一条语句获取租户副本设置规格

【 使用环境 】生产环境 or 测试环境 测试环境
【 OB or 其他组件 】 OB 4.0
【 使用版本 】 OB 4.0
【问题描述】清晰明确描述问题
【复现路径】问题出现前后相关操作
【附件及日志】推荐使用OceanBase敏捷诊断工具obdiag收集诊断信息,详情参见链接(右键跳转查看):

【SOP系列 22 】——故障诊断第一步(自助诊断和诊断信息收集)

【备注】基于 LLM 和开源文档 RAG 的论坛小助手已开放测试,在发帖时输入 [@论坛小助手] 即可召唤小助手,欢迎试用!

目的;打算用源租户名test_pr/test_pb/test_ac 备份片 恢复

目标租户:test_p1r/test_pb1/test_ac1
副本设置:Unit规格test_pr(unit_core_4c12g)
/test_pb(unit_core_16c48g)
/test_ac(unit_core_12c36g)
zone优先级:打散,zone1~zone4全选后一次性选到右边

因为目标租户需要跟原租户的规格和优先级一样,因此想一条SQL 查询test_pr/test_pb/test_ac Unit规格 和zone优先级,麻烦提供?

根据文档库中的信息,您可以使用以下 SQL 查询来获取租户的副本设置规格和 Zone 优先级。这些查询将帮助您确保目标租户与原租户的配置一致。

获取租户的 Unit 规格

要获取租户的资源池和资源单元配置,可以查询 __all_resource_pool__all_resource_unit 视图。以下是具体的 SQL 语句:

-- 获取租户的资源池配置
SELECT 
    tenant_id, 
    resource_pool_name, 
    unit_count, 
    zone_list 
FROM 
    oceanbase.__all_resource_pool 
WHERE 
    tenant_id IN (SELECT tenant_id FROM oceanbase.DBA_OB_TENANTS WHERE tenant_name IN ('test_pr', 'test_pb', 'test_ac'));

-- 获取资源单元的详细配置
SELECT 
    resource_unit_name, 
    max_cpu, 
    memory_size 
FROM 
    oceanbase.__all_resource_unit 
WHERE 
    resource_unit_name IN (
        SELECT 
            resource_unit_name 
        FROM 
            oceanbase.__all_resource_pool 
        WHERE 
            tenant_id IN (SELECT tenant_id FROM oceanbase.DBA_OB_TENANTS WHERE tenant_name IN ('test_pr', 'test_pb', 'test_ac'))
    );

获取租户的 Zone 优先级

要获取租户的 Zone 优先级(即 primary_zone 设置),可以查询 __all_tenant 视图。以下是具体的 SQL 语句:

-- 获取租户的 primary_zone 设置
SELECT 
    tenant_name, 
    primary_zone 
FROM 
    oceanbase.DBA_OB_TENANTS 
WHERE 
    tenant_name IN ('test_pr', 'test_pb', 'test_ac');

综合查询

为了简化操作,您可以将上述查询合并为一个综合查询,以一次性获取所有所需信息:

WITH tenant_info AS (
    SELECT 
        tenant_id, 
        tenant_name, 
        primary_zone 
    FROM 
        oceanbase.DBA_OB_TENANTS 
    WHERE 
        tenant_name IN ('test_pr', 'test_pb', 'test_ac')
)
SELECT 
    ti.tenant_name, 
    rp.resource_pool_name, 
    rp.unit_count, 
    rp.zone_list, 
    ru.resource_unit_name, 
    ru.max_cpu, 
    ru.memory_size, 
    ti.primary_zone
FROM 
    tenant_info ti
JOIN 
    oceanbase.__all_resource_pool rp ON ti.tenant_id = rp.tenant_id
JOIN 
    oceanbase.__all_resource_unit ru ON rp.resource_unit_name = ru.resource_unit_name;

解释

  1. tenant_info: 首先获取指定租户的基本信息,包括 tenant_idtenant_nameprimary_zone
  2. 资源池配置: 使用 __all_resource_pool 视图获取每个租户的资源池配置,包括 resource_pool_nameunit_countzone_list
  3. 资源单元配置: 使用 __all_resource_unit 视图获取每个资源池对应的资源单元配置,包括 resource_unit_namemax_cpumemory_size
  4. 综合查询: 将上述信息通过 JOIN 操作合并到一个结果集中,以便一次性获取所有所需信息。

通过执行上述 SQL 语句,您可以获取源租户 test_prtest_pbtest_ac 的完整副本设置规格和 Zone 优先级,并确保目标租户 test_p1rtest_pb1test_ac1 的配置与之完全一致。

以上信息依据的是《OceanBase 数据库》文档中关于系统视图的部分内容。如果您需要进一步的帮助或有其他问题,请随时告知。

详情请参考:

  1. 使用命令行进行运维
  2. 负载均衡
  3. 租户性能诊断
  4. GV$OB_PARAMETERS
  5. 查找某个租户中执行全表扫描的 SQL
  6. 进行 TPC-C 测试
  7. 统计信息收集监控诊断
select tenant_id,tenant_name,PRIMARY_ZONE from oceanbase.dba_OB_tenants;

select
  t4.tenant_id,
  t4.tenant_name,
  t1.name resource_pool_name,
  t2.`name` unit_config_name,
  t2.max_cpu,
  t2.min_cpu,
  round(t2.memory_size / 1024 / 1024 / 1024, 2) mem_size_gb,
  round(t2.log_disk_size / 1024 / 1024 / 1024, 2) log_disk_size_gb,
  #t2.max_iops,
  #t2.min_iops,
  t3.unit_id,
  t3.zone,
  concat(t3.svr_ip, ':', t3.`svr_port`) observer
from
  oceanbase.__all_resource_pool t1
  join oceanbase.__all_unit_config t2 on (t1.unit_config_id = t2.unit_config_id)
  join oceanbase.__all_unit t3 on (t1.`resource_pool_id` = t3.`resource_pool_id`)
  left join oceanbase.__all_tenant t4 on (t1.tenant_id = t4.tenant_id)
order by
  t1.`resource_pool_id`,
  t2.`unit_config_id`,
  t3.unit_id;

1 个赞