臨時(shí)表空間的幾點(diǎn)說明
臨時(shí)表空間不像普通InnoDB表空間那樣,不支持裸設(shè)備(raw device)。
臨時(shí)表空間使用動(dòng)態(tài)的表空間ID,因此每次重啟時(shí)都會(huì)變化(每次重啟時(shí),都會(huì)重新初始化臨時(shí)表空間文件)。
當(dāng)選項(xiàng)設(shè)置錯(cuò)誤或其他原因(權(quán)限不足等原因)無法創(chuàng)建臨時(shí)表空間時(shí),mysqld實(shí)例也無法啟動(dòng)。
臨時(shí)表空間中存儲(chǔ)這非壓縮的InnoDB臨時(shí)表,如果是壓縮的InnoDB臨時(shí)表,則需要單獨(dú)存儲(chǔ)在各自的表空間文件中,文件存放在 tmpdir(/tmp)目錄下。
臨時(shí)表元數(shù)據(jù)存儲(chǔ)在 INFORMATION_SCHEMA.INNODB_TEMP_TABLE_INFO 視圖中。
有時(shí)執(zhí)行SQL請(qǐng)求時(shí)會(huì)產(chǎn)生臨時(shí)表,極端情況下,可能導(dǎo)致臨時(shí)表空間文件暴漲,幫人處理過的案例中最高漲到快300G,比以前遇到的 ibdata1 文件暴漲還要猛…
臨時(shí)表使用的幾點(diǎn)建議
設(shè)置 innodb_temp_data_file_path 選項(xiàng),設(shè)定文件最大上限,超過上限時(shí),需要生成臨時(shí)表的SQL無法被執(zhí)行(一般這種SQL效率也比較低,可借此機(jī)會(huì)進(jìn)行優(yōu)化)。
檢查 INFORMATION_SCHEMA.INNODB_TEMP_TABLE_INFO,找到最大的臨時(shí)表對(duì)應(yīng)的線程,kill之即可釋放,但 ibtmp1 文件則不能釋放(除非重啟)。
擇機(jī)重啟實(shí)例,釋放 ibtmp1 文件,和 ibdata1 不同,ibtmp1 重啟時(shí)會(huì)被重新初始化而 ibdata1 則不可以。
定期檢查運(yùn)行時(shí)長超過N秒(比如N=300)的SQL,考慮干掉,避免垃圾SQL長時(shí)間運(yùn)行影響業(yè)務(wù)。








暫無數(shù)據(jù)