南大通用GBase8a 集群查看某张表占用的磁盘空间大小

GBase 8a数据库集群提供了元数据表 cluster_tables,用于查询某张表占用的磁盘空间,以及各个分片 CLUSTER_TABLE_SEGMENTS 在各自机器上占用的磁盘空间。

参考

GBase 8a数据倾斜,不同节点磁盘占用差距的几个原因

从集群层通过segment_id直接查询分片数据排查倾斜

作用

查看指定表占用的数据空间,最后更新时间等。

提醒:如下方案在某些86版本里,当磁盘表和列特别多时,需要消耗大量的磁盘操作来统计数据库真实占用的磁盘空间。建议测试后如果发现无法接受,请自行使用df 数据库所在分区的方案来进行统计。

注意:

  • 此功能在部分V95早期版本不可用,大部分V86和新的V9版本均可用。
  • 必须同时提供库名和表名。
  • 如想查看整个zxvmax库占用的空间,建议
    • 以磁盘df 的/opt/gbase目录估算。
    • 或者du -sh /opt/gbase/gnode/userdata/gbase/用户database名字

查看表总空间

警告:在某些老版本的集群,执行如下命令可能会导致宕机,请升级到新版本集群。

select * from information_schema.cluster_tables a where table_schema='MyDBName' and table_name='table_name';

其中MyDBName为库名,比如zxvmax,table_name为表名,比如aggr_volte_register_XXX。

两个参数必须同时指定,每次只能查1个表。
返回结果里已经包含了副本空间。单位是字节。

查看每个分片空间

警告:在某些老版本的集群,执行如下命令可能会导致宕机。如只查询表磁盘空间占用,请使用前一个功能即可,或者请升级到新版本集群。

select * from information_schema.CLUSTER_TABLE_SEGMENTS a where table_schema='MyDBName' and table_name='table_name';

表总空间,等于分片大小的总和*副本数量。 对于复制表就是*节点数量。

使用样例

  • update_time是最后修改时间,比如加载;
  • table_data_size是纯数据占用的磁盘空间;
  • table_storage_size是全部占用的空间,包括元数据和数据等。
  • suffix 是分片号

分布表样例

总空间是每个分片空间的和,乘以副本数量。 本例副本是1+1=2。

如下是一个1000万行的表的情况。

gbase> select count(*) from testdb.t2;
+----------+
| count(*) |
+----------+
| 10000000 |
+----------+
1 row in set (Elapsed: 00:00:00.17)

总数据量情况。共2.7G(已经包含副本空间)。

gbase> select * from information_schema.cluster_tables a where table_schema='testdb' and table_name='t2';
+--------------+--------------+------------+---------------------+---------------------+-----------------+--------------------+------------+
| TABLE_VC     | TABLE_SCHEMA | TABLE_NAME | CREATE_TIME         | UPDATE_TIME         | TABLE_DATA_SIZE | TABLE_STORAGE_SIZE | TABLE_TYPE |
+--------------+--------------+------------+---------------------+---------------------+-----------------+--------------------+------------+
| vcname000001 | testdb       | t2         | 2020-09-05 07:42:51 | 2020-11-29 09:42:14 |       162129972 |         2740314218 | random     |
+--------------+--------------+------------+---------------------+---------------------+-----------------+--------------------+------------+

分片情况,每个450M,3个累积1.37G。

gbase> select * from information_schema.CLUSTER_TABLE_SEGMENTS a where table_schema='testdb' and table_name='t2';
+--------------+--------------+------------+--------+------------+-----------------+--------------------+--------------+
| TABLE_VC     | TABLE_SCHEMA | TABLE_NAME | SUFFIX | HOST       | TABLE_DATA_SIZE | TABLE_STORAGE_SIZE | DATA_PERCENT |
+--------------+--------------+------------+--------+------------+-----------------+--------------------+--------------+
| vcname000001 | testdb       | t2         | n1     | 10.0.2.102 |        27159648 |          456672843 | 33.5036%     |
| vcname000001 | testdb       | t2         | n2     | 10.0.2.202 |        26748872 |          456634381 | 32.9968%     |
| vcname000001 | testdb       | t2         | n3     | 10.0.2.102 |        27156466 |          456849885 | 33.4996%     |
+--------------+--------------+------------+--------+------------+-----------------+--------------------+--------------+
3 rows in set (Elapsed: 00:00:00.01)

分片累积*副本数2,基本和总和一样

gbase> select 456672843*3;
+-------------+
| 456672843*3 |
+-------------+
|  1370018529 |
+-------------+
1 row in set (Elapsed: 00:00:00.00)

gbase> select 456672843*3*2;
+---------------+
| 456672843*3*2 |
+---------------+
|    2740037058 |
+---------------+
1 row in set (Elapsed: 00:00:00.00)

复制表样例

总空间等于分片空间*节点数。本例是3个节点。

gbase> select * from information_schema.cluster_tables a where table_schema='testdb' and table_name='t1_1';
+--------------+--------------+------------+---------------------+---------------------+-----------------+--------------------+------------+
| TABLE_VC     | TABLE_SCHEMA | TABLE_NAME | CREATE_TIME         | UPDATE_TIME         | TABLE_DATA_SIZE | TABLE_STORAGE_SIZE | TABLE_TYPE |
+--------------+--------------+------------+---------------------+---------------------+-----------------+--------------------+------------+
| vcname000001 | testdb       | t1_1       | 2020-12-01 21:24:00 | 2020-12-01 21:24:00 |            1713 |               6285 | replicated |
+--------------+--------------+------------+---------------------+---------------------+-----------------+--------------------+------------+
1 row in set (Elapsed: 00:00:00.01)

gbase> select * from information_schema.CLUSTER_TABLE_SEGMENTS a where table_schema='testdb' and table_name='t1_1';
+--------------+--------------+------------+--------+------------+-----------------+--------------------+--------------+
| TABLE_VC     | TABLE_SCHEMA | TABLE_NAME | SUFFIX | HOST       | TABLE_DATA_SIZE | TABLE_STORAGE_SIZE | DATA_PERCENT |
+--------------+--------------+------------+--------+------------+-----------------+--------------------+--------------+
| vcname000001 | testdb       | t1_1       | n1     | 10.0.2.102 |             571 |               2095 | 100%         |
+--------------+--------------+------------+--------+------------+-----------------+--------------------+--------------+
1 row in set (Elapsed: 00:00:00.00)

gbase> select 2095*3;
+--------+
| 2095*3 |
+--------+
|   6285 |
+--------+
1 row in set (Elapsed: 00:00:00.00)