提问者:小点点

MySQL ibtmp1临时表空间增长了多大?


我们有一个运行在1TB SSD上的MySQL Master,数据库为500GB。 正如您从下面的屏幕截图中看到的,我们正在耗尽空间,因为ibtmp1增长得太大了。 现在是194GB。

MySQL手册说:

“当数据文件达到最大大小时,查询将失败,并出现一个错误,指示表已满。”

因此,我们有两个关切:

  1. 如果此文件继续增长并填满SSD,则数据库将停止工作。
  2. 如果我们限制这个文件的大小,比如100GB,那么如果它被填满,将“查询失败,并出现一个错误,指示表已满。”

我确信手册是误导或者我们是误解,因为肯定不可能MySQL的默认设置允许它填满磁盘然后失败?


共1个答案

匿名用户

我真的很喜欢MySQL,但是有些事情你只能拍脑门。 这是其中之一。 但最重要的是:

当您拥有如此庞大的ibtmp1文件时,您要么

  • 正在构建一个非常巨大的临时表的查询,可能是因为意外地执行了交叉联接
  • 同时创建相对较小的临时表的大量查询
  • 超长运行的事务
  • 要处理的数据特别大

在所有情况下,我会立即采取行动,如果可能的话,摆脱这些疑问。 请查看innodb状态监视器中的慢速查询日志或用于识别这些查询的任何工具。

要回答您的问题,不要指望MySQL在任何地方都使用合理的默认值。

我不知道你怎么想,但对我来说,DB因为磁盘满而停止工作是不可能的。 当查询失败时,就不那么痛苦了。 请记住,我们讨论的查询很可能是错误的。

我已经将所有服务器的最大大小配置为10GB,我对此非常慷慨。

[mysqld]
innodb_temp_data_file_path=ibtmp1:12M:autoextend:max:10G

还要记住,您必须重新启动MySQL server来收缩ibtmp1文件。 设置INNODB_TEMP_DATA_FILE_PATH选项时也是如此。 所以才拍前额。