在 Unix 上,MySQL 使用 TMPDIR
環境變數的值作為儲存暫存檔的目錄路徑名稱。如果未設定 TMPDIR
,MySQL 會使用系統預設值,通常是 /tmp
、/var/tmp
或 /usr/tmp
。
在 Windows 上,MySQL 會依序檢查 TMPDIR
、TEMP
和 TMP
環境變數的值。對於第一個找到已設定的變數,MySQL 會使用它,而不會檢查其餘的變數。如果未設定 TMPDIR
、TEMP
或 TMP
,MySQL 會使用 Windows 系統預設值,通常是 C:\windows\temp\
。
如果包含暫存檔目錄的檔案系統太小,您可以使用 mysqld --tmpdir
選項來指定檔案系統中有足夠空間的目錄。
--tmpdir
選項可以設定為以循環方式使用的多個路徑清單。路徑在 Unix 上應以冒號字元 (:
) 分隔,在 Windows 上應以分號字元 (;
) 分隔。
為了有效地分散負載,這些路徑應位於不同的實體磁碟上,而不是位於同一磁碟的不同分割區上。
如果 MySQL 伺服器充當複本,您可以設定系統變數 replica_load_tmpdir
,以指定在複製 LOAD DATA
陳述式時用於保存暫存檔的單獨目錄。此目錄應位於基於磁碟的檔案系統(而不是基於記憶體的檔案系統)中,以便用於複製 LOAD DATA 的暫存檔可以在機器重新啟動後存留。此目錄也不應是作業系統在系統啟動過程中清除的目錄。但是,如果暫存檔已移除,複製現在可以在重新啟動後繼續進行。
MySQL 會安排在 mysqld 終止時移除暫存檔。在支援此功能的平台(例如 Unix)上,這是透過在開啟檔案後取消連結檔案來完成的。這樣做的缺點是名稱不會出現在目錄清單中,而且您不會看到一個巨大的暫存檔填滿暫存檔目錄所在的檔案系統。(在這種情況下,lsof +L1 可能有助於識別與 mysqld 相關聯的大型檔案。)
在排序 (ORDER BY
或 GROUP BY
) 時,MySQL 通常會使用一或兩個暫存檔。所需的最大磁碟空間由以下公式決定
(length of what is sorted + sizeof(row pointer))
* number of matched rows
* 2
列指標大小通常為四個位元組,但對於非常大的表格,未來可能會增加。
對於某些陳述式,MySQL 會建立非隱藏的暫存 SQL 表格,其名稱以 #sql
開頭。
某些 SELECT
查詢會建立暫存 SQL 表格來保存中間結果。
使用 ALGORITHM=INPLACE
技術不會線上執行的重建表格的 DDL 作業會在與原始表格相同的目錄中建立原始表格的暫存副本。
線上 DDL 作業可能會使用暫存記錄檔來記錄並行 DML、建立索引時的暫存排序檔,以及重建表格時的暫存中間表格檔案。如需更多資訊,請參閱 第 17.12.3 節,「線上 DDL 空間需求」。
InnoDB
使用者建立的暫存表格和磁碟上的內部暫存表格是在 MySQL 資料目錄中名為 ibtmp1
的暫存表格空間檔案中建立的。如需更多資訊,請參閱 第 17.6.3.5 節,「暫存表格空間」。
另請參閱 第 17.15.7 節,「InnoDB INFORMATION_SCHEMA 暫存表格資訊表格」。
選用的 EXTENDED
修飾詞會使 SHOW TABLES
列出因失敗的 ALTER TABLE
陳述式而建立的隱藏表格。請參閱 第 15.7.7.38 節,「SHOW TABLES 陳述式」。