查询某张表占用的 所有分区的大小,以及索引(本地,全局,全文等)大小。 包含逻辑大小和实际硬盘占用大小

【 使用环境 】生产环境 or 测试环境
【 OB or 其他组件 】
【 使用版本 】V4.2.5
【问题描述】查询某张表占用的 所有分区的大小,以及索引(本地,全局,全文等)大小。 包含逻辑大小和实际硬盘占用大小
【复现路径】问题出现前后相关操作
【附件及日志】推荐使用OceanBase敏捷诊断工具obdiag收集诊断信息,详情参见链接(右键跳转查看):

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

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

用户问题: “在 OceanBase V4.2.5 中,如何查询某张表占用的所有分区的大小,以及索引(本地、全局、全文等)的大小,包括逻辑大小和实际硬盘占用大小?”

对于您提到的问题,obdiag 工具主要针对的是日志采集与根因分析,并不直接适用于查询表及索引大小的场景。为了帮助您获取表和索引的大小信息,建议您通过执行 SQL 查询来获得这些数据。

您可以使用如下 SQL 查询语句来获取相关信息:

  1. 查询表和分区的大小

    • 逻辑大小:可以通过查询 gv$partition 视图来获取每个分区的行数和总大小。
      SELECT table_name, partition_name, num_rows, table_size/1024/1024 AS size_mb 
      FROM gv$partition 
      WHERE table_name = '您的表名';
      
    • 实际硬盘占用大小:可以通过查询 gv$tenant_stat 或者 gv$unit_stat 来估算磁盘上的实际占用情况,但请注意这并不是精确值,因为涉及到压缩比等因素。
  2. 查询索引大小

    • 对于本地索引和全局索引,可以查询 gv$index 视图来了解索引的相关信息。
      SELECT index_name, leaf_blocks*32/1024 AS size_mb 
      FROM gv$index 
      WHERE table_name = '您的表名';
      
    • 全文索引的大小通常不容易直接从系统视图中获取,可能需要根据具体的应用场景和存储引擎特性进行评估。

为了更准确地回答您的问题,请提供以下信息:

  1. 您想要查询的具体表名是什么?
  2. 该表是否包含分区?如果是的话,是哪种类型的分区(范围、列表、哈希等)?
  3. 表上定义了哪些类型的索引(本地索引、全局索引、全文索引等)?
  4. 是否有特定的时间点或时间段内的大小变化趋势您也感兴趣?

以上提供的SQL语句可以根据您给出的详细信息进一步调整优化。如果您对如何执行上述查询有任何疑问,或者需要更多帮助,请随时告知。

附上敏捷诊断工具 obdiag 使用帮助链接

查看某表单副本占用磁盘大小

select t1.table_name,
round(sum(t2.data_size)/1024/1024/1024,2) as data_size_gb,
round(sum(t2.required_size)/1024/1024/1024,2) as required_size_gb
from dba_ob_tenants t,cdb_ob_table_locations t1,cdb_ob_tablet_replicas t2
where t.tenant_id=t1.tenant_id
and t1.svr_ip=t2.svr_ip
and t1.tenant_id=t2.tenant_id
and t1.ls_id=t2.ls_id
and t1.tablet_id=t2.tablet_id
and t1.role=‘leader’
and t.tenant_name=‘test1’
and t1.database_name=‘sbtest’
and t1.table_name=‘sbtest1’
group by t1.table_name
order by 3 desc;
–查询某个租户各个索引大小
select a.TENANT_ID, a.DATABASE_NAME, a.TABLE_NAME, a.TABLE_ID, sum( case when b.nested_offset = 0 then IFNULL(b.data_block_count+b.index_block_count+b.linked_block_count, 0) * 2 * 1024 * 1024 else IFNULL(b.size, 0) end ) /1024.0/1024/1024 as data_size_in_GB from CDB_OB_TABLE_LOCATIONS a inner join __all_virtual_table_mgr b on a.svr_ip = b.svr_ip and a.svr_port=b.svr_port and a.tenant_id = b.tenant_id and a.LS_ID = b.LS_ID and a.TABLET_ID = b.TABLET_ID and a.role = ‘LEADER’ and a.tenant_id = 1002 and b.table_type >= 10 and b.size > 0 group by a.TABLE_ID limit 3;

2 个赞

也可以试试敏捷诊断工具obdiag的一键洞察功能,https://www.oceanbase.com/docs/common-obdiag-cn-1000000002200492