记录:突然发现服务器的磁盘空间占用95%,排查后发现 mysql中的 ibtmp1 文件就有35个G
原因
ibtmp1是非压缩的innodb临时表的独立表空间,通过innodb_temp_data_file_path参数指定文件的路径,文件名和大小,默认配置为ibtmp1:12M:autoextend,也就是说在默认情况下支持大文件的系统这个文件大小是可以无限增长的
总之:用到临时表比较多,sql 写的比较差
1.用到临时表
2.GROUP BY无索引字段或GROUP BY + ORDER BY的子句字段不一样时。
3.order by与distinct共用,其中distinct与order by里的字段不一致(主键字段除外)。
4.insert into table1 select xxx from table2。
解决
- 如果不嫌麻烦的话,重启 mysql 就会释放临时表,即:这个文件将会被清理到几kb
- 推荐:设置上限,当到达上限后就可以分析出哪些sql比较差,从而进行sql优化
my.cnf:设置上限阈值
innodb_temp_data_file_path = ibtmp1:12M:autoextend:max:100G