8.4.6 table 格大小限制
MySQL 数据库的有效最大 table 大小通常由 os 对文件大小的限制来确定,而不是由 MySQL 内部限制来确定。有关 os 文件大小限制的最新信息,请参阅特定于您的 os 的文档。
Windows 用户,请注意 FAT 和 VFAT(FAT32)被认为不适合与 MySQL 一起用于生产。请改用 NTFS。
如果遇到全 table 错误,则可能由于多种原因导致它发生:
-
磁盘可能已满。
-
您正在使用
InnoDB
table,并且InnoDB
table 空间文件中的空间已用完。最大 table 空间大小也是 table 的最大大小。有关 table 空间大小的限制,请参见第 14.23 节“ InnoDB 限制”。
通常,对于大于 1TB 的 table,建议将 table 划分为多个 table 空间文件。
-
您已达到 os 文件大小限制。例如,您正在 os 上使用
MyISAM
table,该 table 仅支持最大 2GB 的文件,而数据文件或索引文件已达到此限制。 -
您正在使用
MyISAM
table,并且该 table 所需的空间超出了内部指针大小所允许的空间。MyISAM
允许数据和索引文件默认增加到 256TB,但此限制可以更改为最大允许大小 65,536TB(2567-1 字节)。
如果需要的MyISAM
table 大于默认限制,并且您的 os 支持大文件,则CREATE TABLE语句支持AVG_ROW_LENGTH
和MAX_ROWS
选项。参见第 13.1.18 节“ CREATE TABLE 语句”。服务器使用这些选项来确定允许多大的 table。
如果指针大小对于现有 table 而言太小,则可以使用ALTER TABLE更改选项以增加 table 的最大允许大小。参见第 13.1.8 节“ ALTER TABLE 语句”。
ALTER TABLE tbl_name MAX_ROWS=1000000000 AVG_ROW_LENGTH=nnn;
您只需要为具有BLOB或TEXT列的 table 指定AVG_ROW_LENGTH
;在这种情况下,MySQL 无法仅根据行数来优化所需的空间。
要更改MyISAM
table 的默认大小限制,请设置myisam_data_pointer_size,该值设置用于内部行指针的字节数。如果您未指定MAX_ROWS
选项,则该值用于设置新 table 的指针大小。 myisam_data_pointer_size的值可以是 2 到 7.4 的值允许最大 4GB 的 table。值 6 允许最大 256TB 的 table。
您可以使用以下语句检查最大数据和索引大小:
SHOW TABLE STATUS FROM db_name LIKE 'tbl_name';
您也可以使用myisamchk -dv/path/to/table-index-file。参见第 13.7.5 节“ SHOW 语句”或第 4.6.3 节“ myisamchk-MyISAMtable 维护 Util”。
解决MyISAM
个 table 的文件大小限制的其他方法如下:
-
如果您的大 table 是只读的,则可以使用myisampack对其进行压缩。 myisampack通常会将 table 压缩至少 50%,因此实际上您可以拥有更大的 table。 myisampack还可以将多个 table 合并为一个 table。参见第 4.6.5 节“ myisampack —生成压缩的只读 MyISAMtable”。
- MySQL 包括一个
MERGE
库,使您能够处理与单个MERGE
table 具有相同结构的MyISAM
table 的集合。参见第 15.7 节“ MERGE 存储引擎”。
- MySQL 包括一个
-
您正在使用
MEMORY
(HEAP
)存储引擎;在这种情况下,您需要增加max_heap_table_size系统变量的值。参见第 5.1.7 节“服务器系统变量”。