也就是說,ibtmp1的用法在8.0和5.7中發生了變化。5.7版臨時表的數據存儲在ibtmp1中,8.0版臨時表的數據存儲在會話臨時表空間中。如果臨時表發生更改,更改後的撤消數據將存儲在ibtmp1中。
實驗驗證:將之前的查詢結果保存為臨時表,對應的session為45號,通過查看對應的dictionary表,可以看到45號會話使用了表空間temp_8.ibt,通過將查詢保存為臨時表,可以使用會話臨時表空間,如下圖:
接下來kill session 45,發現temp_8.ibt空間已經被釋放,變成初始大小,狀態為inactive,證明mysql8.0中可以通過kill session釋放臨時表空間。
總結:在mysql5.7中,當會話被殺死時,臨時表會被釋放,但不會僅僅通過在ibtmp文件中進行標記就將空間釋放回操作系統。如果要釋放空間,需要重啟數據庫;在mysql8.0中,可以通過終止會話來釋放臨時表空間。