问题描述
数据库的磁盘突然一直飘升导致数据库被锁定。
问题排查
首先对数据库进行一件诊断,查看空间分析,发现表空间并没有达到让磁盘爆满的程度。
然后查看监控,发现是系统文件空间使用量较大。最后发现是ibtmp1文件一直增加导致磁盘爆满。
问题原因
因为使用关联查询,使用了临时表,当查询的数据需要组合或者排序之类的,数据量过大,会使用临时表空间。ibtmp1是非压缩的innodb临时表的独立表空间,临时表释放后,空间会释放,但是磁盘空间不会释放,空闲空间可以被复用。释放磁盘空间只能重启。
根据监控也可以判断,磁盘中的系统文件使用高有两种情况,一种是ibtmp1高,这种是大查询导致的,一种是ibdata1高,这种是事务没有及时提交导致的。然后查看表空间占用情况 可以使用如下sql:
select * from INFORMATION_SCHEMA.FILES order by TOTAL_EXTENTS desc limit 100;