MySQL データベースの事実上の最大テーブルサイズは、通常、MySQL の内部制限ではなくオペレーティングシステムのファイルサイズに関する制約によって判断します。 オペレーティングシステムのファイルサイズに関する最新情報は、オペレーティングシステム固有のドキュメントを参照してください。
Windows ユーザーの場合、FAT および VFAT (FAT32) は、MySQL で本番使用に適しているとは見なされません。 代わりに NTFS を使用してください。
全テーブルエラーが発生した場合は、いくつかの理由が考えられます:
ディスクがいっぱいになっている可能性がある。
-
InnoDB
テーブルを使用しており、InnoDB
テーブルスペースファイルの領域が不足しています。 最大テーブルスペースサイズは、テーブルの最大サイズでもあります。 テーブルスペースのサイズ制限については、セクション15.22「InnoDB の制限」 を参照してください。一般に、サイズが 1TB を超えるテーブルでは、テーブルを複数のテーブルスペースファイルにパーティション化することをお薦めします。
オペレーティングシステムのファイルサイズ制限に達しました。 たとえば、最大 2GB のサイズのファイルのみをサポートするオペレーティングシステムで
MyISAM
テーブルを使用しており、データファイルまたはインデックスファイルに対してこの制限に達しているとします。-
MyISAM
テーブルを使用していて、テーブルに必要な領域が内部ポインタサイズによって許可されているサイズを超えている。MyISAM
では、データファイルとインデックスファイルのサイズはデフォルトで最大 256T バイトですが、この制限は、65,536T バイト (2567 − 1 バイト) の最大許容サイズまで変更できます。デフォルトの制限より大きな
MyISAM
テーブルが必要であり、オペレーティングシステムが大きなファイルをサポートしている場合は、CREATE TABLE
ステートメントはAVG_ROW_LENGTH
オプションとMAX_ROWS
オプションをサポートします。 セクション13.1.20「CREATE TABLE ステートメント」を参照してください。 サーバーはこれらのオプションを使用して、許可するテーブルのサイズを決定します。ポインタサイズが既存のテーブルに対して小さすぎる場合は、
ALTER TABLE
でオプションを変更して、テーブルの最大許容サイズを増やすことができます。 セクション13.1.9「ALTER TABLE ステートメント」を参照してください。ALTER TABLE tbl_name MAX_ROWS=1000000000 AVG_ROW_LENGTH=nnn;
AVG_ROW_LENGTH
は、BLOB
カラムまたはTEXT
カラムを含むテーブルに対してのみ指定する必要があります。この場合、MySQL では、行数にのみ基づいて必要な領域を最適化することはできません。MyISAM
テーブルのデフォルトのサイズ制限を変更するには、内部行ポインタに使用されるバイト数を設定するmyisam_data_pointer_size
を設定します。MAX_ROWS
オプションを指定しない場合、新しいテーブルのポインタサイズを設定するためにこの値が使用されます。myisam_data_pointer_size
の値は 2 から 7 で指定できます。 4 の値は 4G バイトまでのテーブルを許可し、6 の値は 256T バイトまでのテーブルを許可します。次のステートメントを使用すると、データファイルおよびインデックスファイルの最大サイズを確認できます。
SHOW TABLE STATUS FROM db_name LIKE 'tbl_name';
myisamchk -dv /path/to/table-index-file も使用できます。 セクション13.7.7「SHOW ステートメント」またはセクション4.6.4「myisamchk — MyISAM テーブルメンテナンスユーティリティー」を参照してください。
MyISAM
テーブルのファイルサイズ制限に対処するその他の方法は次のとおりです。大きなテーブルが読み取り専用である場合、myisampack を使用してこのテーブルを圧縮できます。myisampack は通常、少なくとも 50% 圧縮するので、実質上、さらに大きなテーブルを保有できます。myisampack で複数のテーブルを単一のテーブルにマージすることもできます。 セクション4.6.6「myisampack — 圧縮された読み取り専用の MyISAM テーブルの生成」を参照してください。
MySQL には、単一の
MERGE
テーブルと同一の構造を持つMyISAM
テーブルの集まりを処理できるようにするMERGE
ライブラリが含まれます。 セクション16.7「MERGE ストレージエンジン」を参照してください。
MEMORY
(HEAP
) ストレージエンジンを使用している場合は、max_heap_table_size
システム変数の値を増やす必要があります。 セクション5.1.8「サーバーシステム変数」を参照してください。