我正在尝试获取使用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
命令报告的磁盘空间可能无法代表实际的表大小。
那么,有没有一种可靠的方法来获取表的大小?我已经在使用正确的方法来获取表格大小了吗?
答案 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
对于MyISAM,DATA_LENGTH是数据文件的长度,以字节为单位。
对于InnoDB,DATA_LENGTH是分配的大约内存量 用于聚集索引,以字节为单位。具体来说,是集群 索引大小(以页面为单位)乘以InnoDB页面大小。)