The effective maximum table size for MySQL databases is usually determined by operating system constraints on file sizes, not by MySQL internal limits. The following table lists some examples of operating system file-size limits. This is only a rough guide and is not intended to be definitive. For the most up-to-date information, be sure to check the documentation specific to your operating system.
| Operating System | File-size Limit |
|---|---|
| Win32 w/ FAT/FAT32 | 2GB/4GB |
| Win32 w/ NTFS | 2TB (possibly larger) |
| Linux 2.2-Intel 32-bit | 2GB (LFS: 4GB) |
| Linux 2.4+ | (using ext3 file system) 4TB |
| Solaris 9/10 | 16TB |
| MacOS X w/ HFS+ | 2TB |
Windows users, please note that FAT and VFAT (FAT32) are not considered suitable for production use with MySQL. Use NTFS instead.
On Linux 2.2, you can get MyISAM tables
larger than 2GB in size by using the Large File Support (LFS)
patch for the ext2 file system. Most current Linux
distributions are based on kernel 2.4 or higher and include
all the required LFS patches. On Linux 2.4, patches also exist
for ReiserFS to get support for big files (up to 2TB). With
JFS and XFS, petabyte and larger files are possible on Linux.
For a detailed overview about LFS in Linux, have a look at Andreas Jaeger's Large File Support in Linux page at http://www.suse.de/~aj/linux_lfs.html.
If you do encounter a full-table error, there are several reasons why it might have occurred:
The
InnoDBstorage engine maintainsInnoDBtables within a tablespace that can be created from several files. This enables a table to exceed the maximum individual file size. The tablespace can include raw disk partitions, which permits extremely large tables. The maximum tablespace size is 64TB.If you are using
InnoDBtables and run out of room in theInnoDBtablespace. In this case, the solution is to extend theInnoDBtablespace. See Section 13.6.6, “Adding, Removing, or ResizingInnoDBData and Log Files”.You are using
MyISAMtables on an operating system that supports files only up to 2GB in size and you have hit this limit for the data file or index file.You are using a
MyISAMtable and the space required for the table exceeds what is permitted by the internal pointer size.MyISAMpermits data and index files to grow up to 256TB by default, but this limit can be changed up to the maximum permissible size of 65,536TB (2567 – 1 bytes).If you need a
MyISAMtable that is larger than the default limit and your operating system supports large files, theCREATE TABLEstatement supportsAVG_ROW_LENGTHandMAX_ROWSoptions. See Section 12.1.14, “CREATE TABLESyntax”. The server uses these options to determine how large a table to permit.If the pointer size is too small for an existing table, you can change the options with
ALTER TABLEto increase a table's maximum permissible size. See Section 12.1.6, “ALTER TABLESyntax”.ALTER TABLE
tbl_nameMAX_ROWS=1000000000 AVG_ROW_LENGTH=nnn;You have to specify
AVG_ROW_LENGTHonly for tables withBLOBorTEXTcolumns; in this case, MySQL can't optimize the space required based only on the number of rows.To change the default size limit for
MyISAMtables, set themyisam_data_pointer_size, which sets the number of bytes used for internal row pointers. The value is used to set the pointer size for new tables if you do not specify theMAX_ROWSoption. The value ofmyisam_data_pointer_sizecan be from 2 to 7. A value of 4 permits tables up to 4GB; a value of 6 permits tables up to 256TB.You can check the maximum data and index sizes by using this statement:
SHOW TABLE STATUS FROM
db_nameLIKE 'tbl_name';You also can use myisamchk -dv /path/to/table-index-file. See Section 12.4.5, “
SHOWSyntax”, or Section 4.6.3, “myisamchk — MyISAM Table-Maintenance Utility”.Other ways to work around file-size limits for
MyISAMtables are as follows:If your large table is read only, you can use myisampack to compress it. myisampack usually compresses a table by at least 50%, so you can have, in effect, much bigger tables. myisampack also can merge multiple tables into a single table. See Section 4.6.5, “myisampack — Generate Compressed, Read-Only MyISAM Tables”.
MySQL includes a
MERGElibrary that enables you to handle a collection ofMyISAMtables that have identical structure as a singleMERGEtable. See Section 13.8, “TheMERGEStorage Engine”.
You are using the
MEMORY(HEAP) storage engine; in this case you need to increase the value of themax_heap_table_sizesystem variable. See Section 5.1.4, “Server System Variables”.