我有一个包含三列(int、mediumint、int)的巨大 InnoDB 表。设置已开启,前两列innodb_file_per_table
中只有一个PRIMARY KEY
表架构是:
CREATE TABLE `big_table` (
`user_id` int(10) unsigned NOT NULL,
`another_id` mediumint(8) unsigned NOT NULL,
`timestamp` int(10) unsigned NOT NULL,
PRIMARY KEY (`user_id`,`another_id `)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
MySQL 版本是 5.6.16
目前我每秒插入超过 150 行。没有删除,也没有更新。没有显着的回滚或其他事务中止,这会导致浪费空间使用。
MySQL 在该表上显示了 75,7GB 的计算大小。
.ibd 磁盘大小:136,679,784,448 字节 (127.29 GiB)
计数行数:2,901,937,966(每行 47.10 字节)
2 天后,MySQL 还显示该表的计算大小为 75.7 GB。
磁盘上的 .ibd 大小:144,263,086,080 字节(135.35 GiB)
计数行数:2,921,284,863(每行 49.38 字节)
跑表SHOW TABLE STATUS
显示:
Engine | Version | Row_format | Rows | Avg_row_length | Data_length | Max_data_length | Index_length | Data_free | Collation
InnoDB | 10 | Compact | 2645215723 | 30 | 81287708672 | 0 | 0 | 6291456 | utf8_unicode_ci
这是我的问题:
- 为什么磁盘使用量与行数不成比例地增长?
- 为什么
Avg_row_length
和Data_length
完全错误?
希望有人可以帮助我,磁盘使用量不会再像这样增长了。我没有注意到,因为桌子更小。