oceanbase如何统计某个table的大小,包含表的行数和表占用的磁盘空间?

【 使用环境 】测试环境
【 OB or 其他组件 】observer
【 使用版本 】4.1 社区版本
【问题描述】oceanbase如何统计某个table的大小,包含表的行数和表占用的磁盘空间?
【复现路径】问题出现前后相关操作
【问题现象及影响】

【附件】

你可以在sys租户中使用以下SQL语句查询特定表占用的空间大小,包括行数和表占用的磁盘空间:

select b.table_name,svr_ip,role,a.data_size/1024/1024/1024, b.row_count from __all_virtual_meta_table a,__all_virtual_table b where a.role=1 and a.table_id=b.table_id and b.table_name='<table_name>';

<table_name>替换为您要查询的表的名称。

表的行数, 可以直接 select count来查询, 比较准确, 后台的统计总是会有一定滞后

对于表占用空间来说, ob的空间统计有比较多的维度, 目前的确没有一个特别好的视图来做最简单直接的查询
由于是分布式数据库, 同时支持分区表, 所以就存在几个问题

  1. 一个表会存在多个副本, 还有只读副本
  2. 一个表的多个分区可能分布在不同机器上
  3. 局部索引和全局索引的分布问题

目前来说, 如果只是想看磁盘占用空间, 可以通过两个组合下
通过 cdb_ob_table_locations 根据table_id找到对应的 ls_id 和 tablet_id
通过 __all_virtual_tablet_sstable_macro_info 可以查看宏块个数, 每个宏块2M可以算出磁盘占用大小, 这个表里的occupy_size 可以看出真实数据大小