このエラーが発生するケースとしては、以下のようなさまざまなケースが考えられます。
旧バージョン(3.23.0 より前)の MySQL
を使用していて、メモリ内のテンポラリテーブルが
tmp_table_size
バイトより大きくなったとき。
この問題を回避するには、-O
tmp_table_size=#
オプションを使用して
mysqld
でテンポラリテーブルサイズを大きくするか、問題のクエリを発行する前に、SQL
オプション SQL_BIG_TABLES
を使用する。 See 項5.5.6. 「SET
構文」。
また、--big-tables
オプションを指定して mysqld
を開始することもできる。
これは、すべてのクエリに
SQL_BIG_TABLES
を使用しているのとまったく同じ。
MySQL バージョン 3.23
では、メモリ内のテンポラリテーブルが
tmp_table_size
より大きくなると、サーバがそのテーブルを自動的にディスクベースの
MyISAM
テーブルに変換した。
InnoDB
テーブルを使用しており、InnoDB
のテーブルスペースが不足している。この問題を解決するには、InnoDB
のテーブルスペースを拡張する。
サイズが 2GB
のファイルしかサポートしていない OS で
ISAM
または MyISAM
テーブルを使用しており、データファイルまたはインデックスファイルが制限に達した。
MyISAM
テーブルを使用しており、必要なデータまたはインデックスサイズが、MySQL
がポインタを割り当てたものより大きくなっている(MAX_ROWS
を CREATE TABLE
に指定しない場合は、MySQL は 4G
のデータを保持できる分だけポインタを割り当てる)。
最大データとインデックスサイズを確認できる。確認するには、以下のコマンドを実行するか、
SHOW TABLE STATUS FROM database LIKE 'table_name';
myisamchk -dv database/table_name
を使用する。
これで問題がある場合は、以下の方法で解決できる。
ALTER TABLE table_name MAX_ROWS=1000000000 AVG_ROW_LENGTH=nnn;
この場合、MySQL
はレコード数だけに基づいて必要なスペースを最適化することができないので、BLOB/TEXT
フィールドをもつテーブルに
AVG_ROW_LENGTH
を指定することが必要になる。
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.