使用:Debian 9 上的 MySQL 5.6,总 DB 大小约为 450Gb
更新到 5.7,运行 mysql_upgrade,注意到已经占用了大约 150 GB。2 个表真的很大,他们在“复制到 tmp 表”中停留了几个小时
通知innodb_file_per_table
已打开并创建了以前不存在的大型 ibd 文件。
从快照恢复,禁用 file_per_table,再次运行 mysql_upgrade。100GB 消失了,几乎是我总 DB 的 1/4。
在第一种情况下,它从 ibdata 中提取数据并将其放入单独的文件中,但 ibdata 从未缩小,因此占用的空间几乎翻了一番。
第二种情况会发生什么?临时表是否在永远不会缩小的 ibdata 文件中创建,所以即使不再使用表 - 空间仍然没有?
我注意到的另一件事是,直到查询复制到 tmp 表状态大约一个小时后,空间消耗才开始。
1)有什么方法可以避免/最小化空间增加?
是否会在打开 file_per_table 的情况下运行更新,然后禁用它并alter table engine innodb
释放空间?
2)有什么方法可以预测将占用多少空间?至少每桌
3) max_tmp_table_size 如何发挥作用?