mysql ibtmp1文件过大原因及解决办法-亚博电竞官方网址

王尘宇 137 0

btmp1是非压缩的innodb临时表的独立表空间,通过innodb_temp_data_file_path参数指定文件的路径,文件名和大小,默认配置为ibtmp1:12m:autoextend,也就是说在支持大文件的系统这个文件大小是可以无限增长的。

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

mysql ibtmp1文件过大原因及解决办法-第1张图片-王尘宇

ibtmp1增长的原因

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

1.查询语句会先查询temp_table_size(内存分配)的量,当临时存储的量超过这个参数限制时,就会在iptmp1中申请占用空间。

2.select order group by group by 无索引字段或group by order by 的子句字段不一样时。

3.select (select) 子查询

4.insert into select ... from ... 表数据复制

5.select union select 联合语句

临时表空间相关的参数:tmp_table_size ;max_heap_table_size ;innodb_temp_data_file_path

#查看ibtmp1文件大小

select file_name, tablespace_name, engine, initial_size, total_extents*extent_size/1024/1024

as totalsize_mb, data_free/1024/1024 as freesize_mb, maximum_size from information_schema.files

where tablespace_name = 'innodb_temporary';

解决办法

1.限制ibtmp1文件大小:innodb_temp_data_file_path = ibtmp1:12m:autoextend:max:5g

2.优化sql,避免使用临时表。

3.重启mysql实例释放ibtmp1文件

标签: ibtmp1文件过大

抱歉,评论功能暂时关闭!

网站地图