MySQL 8.0 リファレンスマニュアル


B.3.3.5 MySQL が一時ファイルを格納する場所

UNIX では、MySQL は一時ファイルを格納するディレクトリのパス名として、TMPDIR 環境変数の値を使用します。 TMPDIR が設定されていない場合、MySQL はシステムのデフォルトを使用します。通常、これは /tmp/var/tmp、または /usr/tmp です。

Windows では、MySQL は TMPDIRTEMP、および TMP 環境変数の値を順番にチェックします。 MySQL は最初に見つかった設定されている変数を使用し、残りの変数はチェックしません。 TMPDIRTEMP、および TMP がいずれも設定されていない場合、MySQL は Windows システムのデフォルトを使用します。通常、これは C:\windows\temp\ です。

一時ファイルディレクトリを含むファイルシステムが小さすぎる場合は、mysqld --tmpdir オプションを使用して、十分な領域があるファイルシステム内のディレクトリを指定できます。

--tmpdir オプションには、ラウンドロビン方式で使用される複数のパスのリストを設定できます。 パスは、Unix ではコロン文字 (:) で区切り、Windows ではセミコロン文字 (;) で区切る必要があります。

注記

負荷を効果的に分散するには、これらのパスに同じディスクの個別のパーティションではなく、個別の物理ディスクを指定してください。

MySQL サーバーがレプリカとして機能している場合は、slave_load_tmpdir システム変数を設定して、LOAD DATA ステートメントのレプリケート時に一時ファイルを保持するための個別のディレクトリを指定できます。 LOAD DATA の複製に使用される一時ファイルがマシンの再起動後も存続できるように、このディレクトリは (メモリーベースのファイルシステムではなく) ディスクベースのファイルシステム内にある必要があります。 このディレクトリは、システム起動プロセス中にオペレーティングシステムによってクリアされるものではいけません。 ただし、一時ファイルが削除されている場合は、再起動後にレプリケーションを続行できるようになりました。

MySQL は、mysqld が終了したら一時ファイルが削除されるようにしています。 これがサポートされるプラットフォームでは (UNIX など)、ファイルをオープンしたあとにリンク解除することによってこれが行われます。 この方法のデメリットは、名前がディレクトリのリストに表示されないことであり、一時ファイルディレクトリがあるファイルシステムを満杯にしている大きい一時ファイルが表示されません。 (そのような場合は、mysqld に関連付けられている大きいファイルを識別するために、lsof +L1 が役に立つことがあります。)

通常、MySQL はソート (ORDER BY または GROUP BY) を行うときに、1 つまたは 2 つの一時ファイルを使用します。 必要となる最大のディスク領域は次の式によって判別されます。

(length of what is sorted + sizeof(row pointer))
* number of matched rows
* 2

行ポインタのサイズは通常 4 バイトですが、大きいテーブルの場合は将来拡張される可能性があります。

一部のステートメントでは、MySQL によって、非表示ではなく、#sql で始まる名前を持つ一時 SQL テーブルが作成されます。

一部の SELECT クエリーでは、中間結果を保持するための一時 SQL テーブルが作成されます。

テーブルを再構築し、ALGORITHM=INPLACE 技術を使用してオンラインで実行されない DDL 操作では、元のテーブルと同じディレクトリに元のテーブルの一時コピーが作成されます。

オンライン DDL 操作では、同時 DML の記録に一時ログファイル、インデックスの作成時に一時ソートファイル、テーブルの再構築時に一時中間テーブルファイルを使用できます。 詳細は、セクション15.12.3「オンライン DDL 領域の要件」を参照してください。

InnoDB のユーザー作成一時テーブルおよびディスク上の内部一時テーブルは、MySQL データディレクトリの ibtmp1 という名前の一時テーブルスペースファイルに作成されます。 詳細は、セクション15.6.3.5「一時テーブルスペース」を参照してください。

セクション15.15.7「InnoDB INFORMATION_SCHEMA 一時テーブル情報テーブル」も参照してください。

オプションの EXTENDED 修飾子を使用すると、失敗した ALTER TABLE ステートメントによって作成された非表示のテーブルが SHOW TABLES にリストされます。 セクション13.7.7.39「SHOW TABLES ステートメント」を参照してください。


関連キーワード:  テーブル, ディレクトリ, 作成, 一般, エラー, 方法, ディスク, サーバー, ステートメント, InnoDB