如何计算 space innodb table 中一行的磁盘使用率 mysql
How to compute the disk space usage of a row in a mysql innodb table
我有一个应用程序在特定的 innodb table 中插入许多行,但我不知道如何计算将来需要的磁盘 space。
那么给定一个 mysql innodb table 结构,我如何计算一行的磁盘 space 成本?
- TINYINT 占用 1 个字节,INT:4 个字节,BIGINT:8 个字节,TEXT/BLOB/VARCHAR/VARBINARY:2+ 个 字节的平均数 ,DATETIME 和 TIMESTAMP:5 个字节, CHAR取全长等
- 根据 table 中的列将它们相加。
- 乘以 3(用于开销、索引、BTree 结构、浪费 space 等)。这将为您提供 InnoDB 行的磁盘 space 的 粗略估计 。
注意事项:
- 结果可高可低,但这是一个简单的初步猜测。
- 一个 table 至少需要 16KB。
- 过多的二级索引会导致消耗更多space。
- 大量 TEXTs/BLOBs 会导致可能超出论坛的非记录存储。
- 在 table 增长期间的某个时刻,分配单元从 16KB 切换到 8MB,从而导致令人不安的大小跳跃。
- ROW_FORMAT 有所不同。 (但 COMPRESSED 不太可能将 table 缩小超过 2 倍。)
- 寻找缩小 UUID、IP 地址等的方法,以节省 space。
- 不要将 utf8 用于 ascii-only CHAR() 字符串(country_code、十六进制等)。
我有一个应用程序在特定的 innodb table 中插入许多行,但我不知道如何计算将来需要的磁盘 space。
那么给定一个 mysql innodb table 结构,我如何计算一行的磁盘 space 成本?
- TINYINT 占用 1 个字节,INT:4 个字节,BIGINT:8 个字节,TEXT/BLOB/VARCHAR/VARBINARY:2+ 个 字节的平均数 ,DATETIME 和 TIMESTAMP:5 个字节, CHAR取全长等
- 根据 table 中的列将它们相加。
- 乘以 3(用于开销、索引、BTree 结构、浪费 space 等)。这将为您提供 InnoDB 行的磁盘 space 的 粗略估计 。
注意事项:
- 结果可高可低,但这是一个简单的初步猜测。
- 一个 table 至少需要 16KB。
- 过多的二级索引会导致消耗更多space。
- 大量 TEXTs/BLOBs 会导致可能超出论坛的非记录存储。
- 在 table 增长期间的某个时刻,分配单元从 16KB 切换到 8MB,从而导致令人不安的大小跳跃。
- ROW_FORMAT 有所不同。 (但 COMPRESSED 不太可能将 table 缩小超过 2 倍。)
- 寻找缩小 UUID、IP 地址等的方法,以节省 space。
- 不要将 utf8 用于 ascii-only CHAR() 字符串(country_code、十六进制等)。