mysql innodb临时表btmp1文件太大

某日生产环境(数据库实例)告警,磁盘使用率过高!

检查发现是由于mysql的data目录的ibtmp1文件太大,达到了30GB

一、ibtmp1文件是干嘛的?

就是用来存放临时表查询时的数据。

二、ibtmp1增长的原因是什么?
主要与SQL有关,尤其是大量的分组聚合,排序,join查询SQL.
通常如下情况会造成iptmp1上涨:

查询语句会先查询temp_table_size(内存分配)的量,当临时存储的量超过这个参数限制时,就会在iptmp1中申请占用空间。
select order group by GROUP BY 无索引字段或group by + order by 的子句字段不一样时。
select (select) 子查询
insert into select … from … 表数据复制
select union select 联合语句

注意:临时表释放后,空间会释放,但是磁盘空间不会释放,空闲空间可以被复用。释放磁盘空间只能重启

三、解决办法
1、去检查sql!

通过慢查询日志找到慢sql(包含子查询的sql着重关注),要确保子查询内的结果集不要太大(返回太多行),可以通过子查询的where条件缩减结果集。

或是通过show processlist查询的,如图:

mysql innodb临时表btmp1文件太大

我这里正是因为sql太慢,和子查询的结果集太大,导致了mysql线程卡死。通过优化后,iptmp1文件大小正常了。

2、my.cnf配置临时文件大小限制

[mysqld]
innodb_temp_data_file_path=ibtmp1:12M:autoextend:max:500M

不推荐,因为一旦临时文件增长到500M后, 再进行需要临时表的sql查询(例如子查询),是会报错的!

文章来源:https://www.cnaaa.net,转载请注明出处:https://www.cnaaa.net/archives/10602

(0)
凯影的头像凯影
上一篇 2023年12月15日 下午3:29
下一篇 2023年12月18日 下午3:06

相关推荐

  • 解决Authentication plugin ‘caching_sha2_password‘ cannot be loaded问题

    报错原因用图形化用户界面连接的MySQL8.0时,报错:Authentication plugin ‘caching_sha2_password’ cannot be loaded MySQL8.0之前的版本中加密规则是mysql_native_password,而在MySQL8.0之后,加密规则是caching_sha2_password。 解决方法1、升…

    2023年8月22日
    1.8K00
  • docker容器无法访问宿主机数据库

    今天用docker部署一个web服务时遇到总是连不上宿主机mysql数据库的问题,报SQLSTATE[HY000] [2002] Connection refused,经过测试,宿主机用相同配置可以连上,登入docker容器内就连不上,初步判断容器内通过localhost或127.0.0.1是连不上宿主机的。具体原因和解决方法如下: 原因: 今天用docke…

    2023年8月9日
    1.4K00
  • 数据库报错:Cause com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:Communications link failure

    原因1.因为SSL连接原因(大部分人的原因)因为MySQL在高版本需要指明是否进行SSL连接。有可能你 pom 文件引入的 MySQL 依赖版本是MySQL5.7及以上 这些的时候,你就需要指定SSL连接,如果你不知道,默认就是开启,所以就会出现上面的错误。 2.因为数据库连接超时原因当数据库重启或数据库空闲连接超过设置的最大timemout时间,数据库会强…

    2023年8月1日
    71600
  • MySQL 常用脚本

    1.导出整个数据库   2.导出一个表   3.导出一个数据库结构 4.导入数据库  

    2023年4月25日
    1.0K00
  • MySQL 中 DELETE 语句中可以使用别名么?

    某天,正按照业务的要求删除不需要的数据,在执行 DELETE 语句时,竟然出现了报错! 背景 某天,正按照业务的要求删除不需要的数据,在执行 DELETE 语句时,竟然出现了报错(MySQL 数据库版本 5.7.34): 这就有点奇怪了,因为我在执行删除语句之前,执行过同样条件的 SELECT 语句,只是把其中的 select * 换成了…

    2023年11月22日
    1.1K00

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

在线咨询: QQ交谈

邮件:712342017@qq.com

工作时间:周一至周五,8:30-17:30,节假日休息

关注微信