當前位置:成語大全網 - 書法字典 - 如何修改mysql數據庫的臨時表空間大小

如何修改mysql數據庫的臨時表空間大小

以MySQL 8.0為例,通過查看8.0的官方文檔,我們知道8.0的臨時表空間分為會話臨時表空間和全局臨時表空間。當InnoDB被配置為磁盤內部臨時表的存儲引擎時,會話臨時表空間存儲用戶創建的臨時表和優化器創建的內部臨時表。當會話斷開時,它的臨時表空間將被截斷並釋放回池中。也就是說,在8.0中,有壹個特殊的會話臨時表空間,當會話被殺死時,可以回收磁盤空間;原來的ibtmp1是當前的全局臨時表空間,存儲了改變用戶創建的臨時表的回滾段。在5.7中,ibtmp1存儲用戶創建的臨時表和磁盤內部的臨時表。

也就是說,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中,可以通過終止會話來釋放臨時表空間。