【问题标题】:How to get the storage space of a table in the MariaDB MyRocks storage engineMariaDB MyRocks存储引擎中如何获取表的存储空间
【发布时间】:2019-03-17 00:06:43
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: mysql mariadb rocksdb storage-engines


    【解决方案1】:

    假设存储引擎是 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 页面大小。)

    【讨论】:

    • 您好 Lukasz,感谢您的回复。不幸的是,当我写这个问题时,这是一个错字。我实际上使用的是 1024。很抱歉浪费您的时间。
    • @CydrickT 你也可以试试MAX_DATA_LENGTH 而不是DATA_LENGTH
    • 我会以什么方式使用这个变量?另请注意,存储引擎是 MyRocks,相对较新。
    • 我不认为 Max... 是相关的。 3x 是文本的典型收缩系数;你得到6倍。 InnoDB 在磁盘上往往比 MyISAM 大 2 到 3 倍;我不知道 MyRocks。
    • 刚刚用max_data_length试了一下,结果比data_length还要小,所以对我来说没有意义。
    猜你喜欢
    • 1970-01-01
    • 2018-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多