Documentation Home
MySQL 5.6 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 26.8Mb
PDF (A4) - 26.9Mb
HTML Download (TGZ) - 7.1Mb
HTML Download (Zip) - 7.2Mb


B.5.4.4 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 オプションを使用して、十分な領域があるファイルシステムのディレクトリを指定できます。レプリケーションのスレーブでは、LOAD DATA INFILE ステートメントをレプリケートするときに、--slave-load-tmpdir を使用して一時ファイルを保持するための別個のディレクトリを指定できます。

--tmpdir オプションには、ラウンドロビン方式で使用される複数のパスのリストを設定できます。パスは UNIX ではコロン文字 (:)、Windows ではセミコロン文字 (;) で区切るようにしてください。

注記

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

MySQL サーバーがレプリケーションのスレーブとして動作する場合は、--slave-load-tmpdir にメモリーベースのファイルシステム上にあるディレクトリ、またはサーバーのホストが再起動されたときにクリアーされるディレクトリを設定しないようにしてください。レプリケーションスレーブは、一部の一時ファイルがマシンの再起動後も存続し、一時テーブルまたは LOAD DATA INFILE 操作を複製できるようにする必要があります。サーバーが再起動されたときに、スレーブの一時ファイルディレクトリ内のファイルが失われると、レプリケーションは失敗します。

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 バイトですが、大きいテーブルの場合は将来拡張される可能性があります。

一部の SELECT クエリーでは、MySQL は一時 SQL テーブルを作成します。これらは隠しテーブルではなく、SQL_* という形式の名前が付けられます。

ほとんどの場合、ALTER TABLE は元のテーブルの一時コピーを元のテーブルと同じディレクトリに作成します。ただし、ALTER TABLE でインプレース手法 (オンライン DDL) が使用された場合、InnoDB は一時ファイルを一時ファイルディレクトリに作成します。このディレクトリがそのようなファイルを保持するほどに十分に大きくない場合は、tmpdir システム変数に別のディレクトリを設定する必要があることがあります。オンライン DDL については、セクション14.11「InnoDB とオンライン DDL」を参照してください。


User Comments
User comments in this section are, as the name implies, provided by MySQL users. The MySQL documentation team is not responsible for, nor do they endorse, any of the information provided here.
Sign Up Login You must be logged in to post a comment.