TiDB如何统计每个表磁盘占用量和行数

【 TiDB 版本】
V5.1.2

【问题】
由于TiDB属于基础建设,需要对各个团队的资源使用情况进行统计,具体要细分到表这一级别。
目前看到grafana只有集群和机器总体磁盘容量,并未有每个表所占据的实际容量(压缩后)。

mysql的统计命令似乎在分布式系统上并不准确

我尝试使用SHOW TABLE x_tab REGIONS命令来统计,但行数太多了并无法肉眼处理
我尝试使用该语句select * from(SHOW TABLE x REGIONS) limit 1;但显然他是无法正常工作的

所以我怎样才可以方便快捷的统计出各个表的各种信息呢?

1 个赞

SHOW TABLE x_tab REGIONS的数据可以直接在INFORMATION_SCHEMA下TIKV_REGION_STATUS表里取
select * from INFORMATION_SCHEMA.TIKV_REGION_STATUS where TABLE_NAME='xx';

试试:

select `instance` ,max(value)  from tikv_store_size 
where `type` = 'used'
group by `instance` ;
mysql> SHOW TABLE x_tab REGIONS \G
*************************** 1. row ***************************
           REGION_ID: 32222634
           START_KEY: t_102_5f729664b28db101cc00
             END_KEY: t_128_5f728000000000000014
           LEADER_ID: 32226543
     LEADER_STORE_ID: 8
               PEERS: 32226543, 32228171, 32228243
          SCATTERING: 0
       WRITTEN_BYTES: 7441
          READ_BYTES: 8538
APPROXIMATE_SIZE(MB): 97
    APPROXIMATE_KEYS: 405222
1 row in set (0.00 sec)

话说,像是这张图里,regionid指的是region group id嘛?
https://docs.pingcap.com/zh/tidb/dev/sql-statement-show-table-regions
这个文档里描述的是region id。这样的话,32222634既不是region leader id,也不是region peers id,很奇怪。

如果搜出来一行是一个region group的话,我是否计算数据量就不需要乘副本数,只需要乘压缩系数了呢?

这块没找到相关的说明,可能得实际测试下了,有结果希望大佬能反馈下。

系统表information_schema.tables可以查到你要的信息,但是是基于统计信息的一个估算值,可能存在误差:
https://docs.pingcap.com/zh/tidb/v5.2/information-schema-tables

请问下这个是包含副本容量在内的,还是要自己乘副本数呢?文档里好像没这块备注

information_schema.tables是不考虑副本的,数据长度 = 统计信息中的行数 × 元组各列存储长度和。这个依赖统计信息,一般不太准。

1 个赞

information_schema下TIKV_REGION_STATUS中有TABLE_ID、APPROXIMATE_SIZE列和tables表关联查下,虽不是实际的大小,可以计算出各个库的大概比例

1 个赞

数据量统计完了,这里我认为他是指的region group id。容量包含了所有副本。

因为我磁盘才用了1T,这表所有加起来2T,算下来压缩到50%。
如果他不算副本数,那总不可能3副本的6T压缩成1T,压缩到20%基本不可能出现

:+1:

此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。