__all_virtual_meta_table系统视图中查出来表的row_count都是0

【产品名称】oceanbase-ce

【产品版本】v3.1.0

【问题描述】

SELECT t.table_name, t2.partition_id, t2.ZONE, t2.svr_ip, t2.role, a.primary_zone, t2.row_count, round(data_size/1024/1024,0) data_size_MB

FROM oceanbase.__all_tenant AS a JOIN oceanbase.__all_virtual_database AS d ON (a.tenant_id = d.tenant_id) JOIN oceanbase.__all_virtual_table AS t ON (t.tenant_id = d.tenant_id AND t.database_id = d.database_id) JOIN oceanbase.__all_virtual_meta_table t2 ON (t.tenant_id = t2.tenant_id AND (t.table_id=t2.table_id OR t.tablegroup_id=t2.table_id) AND t2.ROLE IN (1))

WHERE a.tenant_id IN (‘1001’) AND t.table_type IN (3) AND d.database_name = ‘tpcc_100’ AND t.table_name IN(‘bmsql_oorder’, ‘bmsql_order_line’)

ORDER BY t.tenant_id, d.database_name, t.table_name, t2.partition_id;

用上述sql语句查系统视图__all_virtual_meta_table时返回的row_count都是0,但是表中是有数据的。之前一个老师说合并转储之后再试试,我这试了一下查出来的row_count还是0。请问是为什么?

所有分区表的row_count都是0

直接select  row_count from oceanbase.__all_virtual_meta_table where table_name IN ('bmsql_oorder''bmsql_order_line')看看结果

  1. 确认是跑过major freeze,而不是minor freeze;
  2. 确认下这个表是不是在partition group内,可以把建表语句贴一下
  1. 确定是major freeze
  2. 该表在partition group "tpcc_group"里面

  1. 当一张表属于一个table group的时候,__all_virtual_meta_table显示的数据不准确;
  2. 可以通过以下的sql查询

select svr_ip, store_type, major_version, count(1),sum(row_count), round(sum(occupy_size)/1024/1024,0) as occupy_size_MB from __all_virtual_storage_stat where table_id in (select table_id from __all_virtual_table where table_name = 'lineitem3') group by store_type, svr_ip, major_version;

select svr_ip, store_type, major_version, count(1),sum(row_count), round(sum(occupy_size)/1024/1024,0) as occupy_size_MB from __all_virtual_storage_stat where table_id in (select table_id from __all_virtual_table where table_name = 'lineitem3') group by store_type, svr_ip, major_version;

  1. 这个sql可以使用
  2. 不过如果major freeze之后会出现两个版本的SSTable,在查询的时候返回的行数之和会是真实结果的两倍,在查询的时候需要取最新的SSTableID或者避免major freeze

通过major_version应该可以区分两个版本的sstable了吧