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

标签 mysql innodb temp-tables

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

enter image description here

MySQL Manual说:

"When the data file reaches the maximum size, queries fail with an error indicating that the table is full."

因此我们有两个担忧:

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

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

最佳答案

我真的很喜欢MySQL,但是有些东西你只能拍拍额头。这是其中之一。但首先要做的是:

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

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

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

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

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

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

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

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

关于mysql - MySQL ibtmp1 临时表空间增长到多大?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62754558/

相关文章:

php - 访问由 while 循环生成的特殊 div

java - 在 hibernate 中使用 MySQL 变量和赋值

MySQL外键错误1005

mysql - 此 SQL 查询是否创建临时表?

TSQL:确定存储过程返回的列数

mysql - 分组和有限查询的随机顺序

php - 为什么查询成功后我会从 mysqli_result::free 收到 fatal error ?

php - MySQL 行消失(神秘)

mysql - InnoDB:在现有表中查找聚集索引

postgresql - 我需要在 PostgreSQL 中手动 VACUUM 临时表吗?