3

我正在尝试获取使用 MyRocks 存储引擎的表在磁盘上占用的空间,但在我期望的结果、查询information_schema和操作系统报告的大小之间得到了不一致的结果。

为了获得 MariaDB 报告的大小,我使用以下 select 语句:

select table_name 'Table Name',
      (data_length+index_length)/power(1024,3) 'Table Size in GB' 
from information_schema.tables where table_schema="MyTableName";

对于我正在做的事情,它返回的数字非常小,以至于我怀疑它是否报告了实际大小(4 000 000 行包含大量文本的 0.4GB)。

如果我运行命令du -h /var/lib/mysql/#rocksdb/,我将获得 2.4GB 的磁盘大小,这比我预期的要多一些。但是,如果我理解正确,MyRocks 会在插入数据时压缩数据,因此该du命令报告的磁盘空间可能不代表实际的表大小。

那么,是否有可靠的方法来获取表格的大小?我是否已经使用正确的方法来获取表格大小?

4

1 回答 1

2

看起来您需要使用POWER(1024,3)而不是POWER(2014,3)假设存储引擎是 MyISAM:

select table_name AS `Table Name`,
      (data_length+index_length)/power(1024,3) AS `Table Size in GB` 
from information_schema.tables 
where table_schema='MyTableName';

和计算:

(data_length+index_length)/(2014*2014*2014) = 0.4
=> 
(data_length+index_length) = 3267671497,6

3267671497,6/(1024*1024*1024) = 3.04GB

DATA_LENGTH

对于 MyISAM,DATA_LENGTH 是数据文件的长度,以字节为单位

对于 InnoDB,DATA_LENGTH 是为聚集索引分配的大致内存量,以字节为单位。具体来说,它是聚集索引大小(以页面为单位)乘以 InnoDB 页面大小。)

于 2018-10-14T11:12:56.470 回答