如何在MariaDB MyRocks存储引擎中获取表的存储空间

时间:2018-10-11 19:57:18

标签: mysql mariadb rocksdb storage-engines

我正在尝试获取使用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";

哪个返回的值对于我正在执行的操作非常少,以至于我怀疑它报告的是实际大小(4GB包含大量文本的行为0.4GB)。

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

那么,有没有一种可靠的方法来获取表的大小?我已经在使用正确的方法来获取表格大小了吗?

1 个答案:

答案 0 :(得分:2)

假设存储引擎为MyISAM,您似乎需要使用POWER(1024,3)而不是POWER(2014,3)

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页面大小。