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

war*_*ick 2 mysql innodb temp-tables

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

在此输入图像描述

MySQL手册说:

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

因此我们有两个担忧:

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

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

fan*_*nts 5

我确实非常喜欢MySQL,但是有些东西你只能拍拍额头。这是其中之一。但首先要做的事情是:

当你有这么大的 ibtmp1 文件时,你要么有

  • 一个查询正在构建一个太大的临时表,可能是不小心进行了交叉连接
  • 大量查询同时创建相对较小的临时表
  • 非常长时间运行的事务
  • 需要处理的数据量特别大

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

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

我不了解你的情况,但对我来说,数据库因磁盘已满而停止工作不是一个选择。当查询失败时,痛苦就不那么大了。请记住,我们很可能正在讨论错误的查询。

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

[mysqld]
innodb_temp_data_file_path=ibtmp1:12M:autoextend:max:10G
Run Code Online (Sandbox Code Playgroud)

另请记住,您必须重新启动 MySQL 服务器才能缩小 ibtmp1 文件。与设置选项相同innodb_temp_data_file_path。于是拍了拍额头。