在 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 陳述式」。