如何在mariadb myrocks存储引擎中获取表的存储空间

fjaof16o  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(557)

我试图获得一个使用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";

对于我正在做的事情,它返回了一个非常小的数字,以至于我怀疑它是否报告了实际大小(对于包含大量文本的400000行,0.4gb)。
如果我执行命令 du -h /var/lib/mysql/#rocksdb/ ,我得到的磁盘大小是2.4gb,这比我预期的要大一些。但是,如果我理解正确,myrocks会在插入数据时压缩数据,因此 du 命令不代表实际的表大小。
那么,有没有可靠的方法来获得表的大小呢?我已经用正确的方法得到了table的尺寸了吗?

xeufq47z

xeufq47z1#

看来你需要使用 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

数据长度
对于myisam,data_length是数据文件的长度,以字节为单位。
对于innodb,data_length是为聚集索引分配的大致内存量,以字节为单位。具体来说,它是聚集索引大小(以页为单位)乘以innodb页大小。)

相关问题