MySQL ibtmp1临时表空间有多大?

时间:2020-07-06 10:54:52

标签: mysql innodb temp-tables

我们有一个MySQL Master运行在具有500GB数据库的1TB SSD上。从下面的屏幕快照中可以看到,由于ibtmp1的空间过大,我们的空间不足。现在是194GB。

enter image description here

MySQL Manual说:

“当数据文件达到最大大小时,查询将失败,并显示表已满的错误。”

因此,我们有两个问题:

  1. 如果该文件继续增长并填充SSD,我们的数据库将停止工作。
  2. 如果我们限制此文件的大小为100GB,则如果该文件已满,则“查询将失败,并显示表已满的错误。”

我确定该手册具有误导性或我们误解了,因为肯定不能保证MySQL的默认设置允许它填充磁盘然后失败吗?

1 个答案:

答案 0 :(得分:2)

我非常喜欢MySQL,但是在某些情况下您只能拍额头。这就是其中之一。但是首先要注意的是:

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

  • 正在构建一个太大的临时表的查询,可能是偶然地进行了交叉联接
  • 大量查询可同时创建相对较小的临时表
  • 运行时间很长的交易
  • 要处理的大数据

在所有情况下,我都会立即采取措施,并尽可能消除这些查询。在innodb状态监视器中或您用于识别这些查询的任何工具中查看您的慢速查询日志。

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

我不了解您,但是对我来说,由于磁盘已满而无法停止工作的DB。当查询失败时,它会很轻松。请记住,我们最有可能谈论的是错误的查询。

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

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

还要记住,您必须重新启动MySQL服务器以收缩ibtmp1文件。与设置innodb_temp_data_file_path选项相同。因此,额头耳光。