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

相关推荐

  • 如何解决生产环境MySQL的死锁问题

    生产问题 在生产环境中发现我们数据库出现了一个异常,异常堆栈信息如下: 从堆栈信息可以很容易知道死锁问题。但是这个更新语句为什么会出现死锁呢? 问题原因 死锁产生的原因有四个分别是: 互斥 循环等待 不可剥夺 请求与保持 只要产生死锁以上四个条件比然满足,因此考虑这个SQL语句是否产生了这四个死锁条件。 分析: 由于我们使用的是云数据库,因此可以通过云数据库…

    2022年8月21日
    1.4K00
  • Oracle用户密码过期的处理方法

    受影响版本:Oracle11g以上版本。 导致密码消失的原因:Oracle 11g中默认的DEFAULT概要文件中口令有效期PASSWORD_LIFE_TIME默认值为180天。 当以客户端登陆Oracle提示ORA-28002,则基本可以确定登陆帐号已过有效期,使用具有DBA权限的帐号重置该帐号密码即可。 解决方法: 以下步骤以具有DBA权限用户操作 1.…

    2024年5月9日
    1.5K00
  • MySQL异常解决】MySQL执行SQL文件出现【Unknown collation ‘utf8mb4_0900_ai_ci‘】的解决方案

    一、背景描述从服务器MySQL中导出数据为SQL执行脚本后,在本地电脑执行导出的SQL脚本, 报错:Unknown collation ‘utf8mb4_0900_ai_ci‘ 打开SQL脚本,查看 utf8mb4_0900_ai_ci 关键字,这是字段的字符集。 二、报错原因1、MySQL 版本不一样;2、utf8mb4_0900_ai_ci 在 MySQ…

    2023年8月23日
    1.6K00
  • KeyDB: 一款比 Redis 性能更强的分布式数据库

    eyDB 是一个开源的,高性能的,多线程的内存键值存储。它是流行的 Redis 数据库的分支版本,完全兼容 Redis 命令和数据类型。KeyDB 提供了很多的高级功能,如 Lua 脚本,LRU 淘汰和命令的并行执行。它是为企业环境构建的,提供高可用性和集群支持。KeyDB 也针对速度进行了优化,基准测试表明它是可用的键值存储之一。总的来说,KeyDB 是内…

    2023年6月28日
    1.5K00
  • MySQL 用户管理 – 添加用户、授权、删除用户

    不要直接使用 root 用户管理应用数据 添加用户 以root用户登录数据库,运行以下命令: 上面的命令创建了用户 zhangsan, 密码是 zhangsan. 在 mysql.user 表里可以查看到新增用户的信息: 授权 命令格式: grant privilegesCode on dbName.tableName to username@host id…

    2022年12月21日
    1.4K00

发表回复

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

在线咨询: QQ交谈

邮件:712342017@qq.com

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

关注微信