MYSQL的ibtmp1文件太大問(wèn)題及解決辦法
ibtmp1是非壓縮的innodb臨時(shí)表的獨(dú)立表空間,通過(guò)innodb_temp_data_file_path參數(shù)指定文件的路徑,文件名和大小,默認(rèn)配置為ibtmp1:12M:autoextend,也就是說(shuō)在支持大文件的系統(tǒng)這個(gè)文件大小是可以無(wú)限增長(zhǎng)的。
臨時(shí)表釋放后,空間會(huì)釋放,但是磁盤(pán)空間不會(huì)釋放,空閑空間可以被復(fù)用。釋放磁盤(pán)空間只能重啟。
ibtmp1增長(zhǎng)的原因
ibtmp1增長(zhǎng)主要與SQL有關(guān),尤其是大量的分組聚合,排序,join查詢SQL.通常如下情況會(huì)造成iptmp1上漲:
1.查詢語(yǔ)句會(huì)先查詢temp_table_size(內(nèi)存分配)的量,當(dāng)臨時(shí)存儲(chǔ)的量超過(guò)這個(gè)參數(shù)限制時(shí),就會(huì)在iptmp1中申請(qǐng)占用空間。
2.select order group by GROUP BY 無(wú)索引字段或group by + order by 的子句字段不一樣時(shí)。
3.select (select) 子查詢
4.insert into select ... from ... 表數(shù)據(jù)復(fù)制
5.select union select 聯(lián)合語(yǔ)句
臨時(shí)表空間相關(guān)的參數(shù):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.優(yōu)化SQL,避免使用臨時(shí)表。
3.重啟mysql實(shí)例釋放ibtmp1文件
寶塔設(shè)置定時(shí)重啟數(shù)據(jù)庫(kù)方法
新建SHELL腳本,填入以下代碼:service mysqld restart
針對(duì)臨時(shí)表及相關(guān)對(duì)象引入新的“non-redo” undo log,存放于臨時(shí)表空間。該類型的undo log非 redolog 因?yàn)榕R時(shí)表不需崩潰恢復(fù)、也就無(wú)需redo logs,但卻需要 undo log用于回滾、MVCC等。 默認(rèn)的臨時(shí)表空間文件為ibtmp1,位于數(shù)據(jù)目錄在每次服務(wù)器啟動(dòng)時(shí)被重新創(chuàng)建,可通過(guò)innodb_temp_data_file_path指定臨時(shí)表空間。 ibtmp1是非壓縮的innodb臨時(shí)表的獨(dú)立表空間,通過(guò)innodb_temp_data_file_path參數(shù)指定文件的路徑,文件名和大小,默認(rèn)配置為ibtmp1:12M:autoextend,也就是說(shuō)在支持大文件的系統(tǒng)這個(gè)文件大小是可以無(wú)限增長(zhǎng)的。
常見(jiàn)的使用tmp臨時(shí)表空間的場(chǎng)景
9、評(píng)估多表UPDATE語(yǔ)句。
實(shí)例分析
1、問(wèn)題現(xiàn)象
ll -h ibtmp1-rw-r----- 1 mysql mysql 1.2T Aug 15 16:17 ibtmp1
2、問(wèn)題分析
3、解決方案
innodb_temp_data_file_path = ibtmp1:12M:autoextend:max:50G # 12M代表文件初始大小,50G代表最大sizeshow variables like 'innodb_temp_data_file_path';+----------------------------+-------------------------------+| Variable_name | Value |+----------------------------+-------------------------------+| innodb_temp_data_file_path | ibtmp1:12M:autoextend:max:50G |+----------------------------+-------------------------------+
臨時(shí)表使用的幾點(diǎn)建議

本文作者:徐林
聲明:本站所有文章資源內(nèi)容,如無(wú)特殊說(shuō)明或標(biāo)注,均為采集網(wǎng)絡(luò)資源。如若本站內(nèi)容侵犯了原著者的合法權(quán)益,可聯(lián)系本站刪除。
