【问题标题】:How to compute the disk space usage of a row in a mysql innodb table如何计算mysql innodb表中一行的磁盘空间使用情况
【发布时间】:2016-11-10 08:14:08
【问题描述】:

我有一个应用程序在特定的 innodb 表中插入许多行,但我不知道如何计算未来所需的磁盘空间。

那么给定一个 mysql innodb 表结构,如何计算一行的磁盘空间成本?

【问题讨论】:

  • 你不能。原因:您没有向我们展示表定义,并且如果您有可变长度列(varchars、texts、blob) - 您无法准确确定平均长度是多少。您最好的选择是使用您现在拥有的数据计算平均长度。如果达到可以填满几百个演出的地步,那么您将遇到很多其他问题,而这些都不是磁盘空间。

标签: mysql innodb


【解决方案1】:
  1. TINYINT 占用 1 字节,INT:4 字节,BIGINT:8 字节,TEXT/BLOB/VARCHAR/VARBINARY:2+字节平均数,DATETIME 和 TIMESTAMP:5 字节,CHAR 占全长等。
  2. 根据表中的列将它们相加。
  3. 乘以 3(用于开销、索引、BTree 结构、浪费的空间等)。这将为您提供一个 InnoDB 行的磁盘空间的粗略估计。

注意事项:

  • 结果可能高或低,但这是一个简单的初步猜测。
  • 一个表至少需要 16KB。
  • 二级索引过多会导致占用更多空间。
  • 大量 TEXT/BLOB 可能会导致可能超出论坛的非记录存储。
  • 在表增长过程中的某个时刻,分配单元会从 16KB 切换到 8MB,从而导致大小出现令人不安的跳跃。
  • ROW_FORMAT 有所不同。 (但 COMPRESSED 不太可能将表格缩小 2 倍以上。)
  • 寻找缩小 UUID、IP 地址等的方法以节省空间。
  • 不要将 utf8 用于仅 ascii 的 CHAR() 字符串(country_code、hex 等)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-07
    • 2011-03-13
    • 2018-05-28
    • 1970-01-01
    • 2011-02-19
    • 1970-01-01
    • 2010-11-19
    相关资源
    最近更新 更多