10.4.6 Пределы размера таблиц
Эффективный максимальный размер таблицы для баз данных MySQL обычно определяется ограничениями операционной системы на размер файлов, а не внутренними ограничениями MySQL. Для получения актуальной информации об ограничениях размера файлов операционной системы обратитесь к документации вашей операционной системы.
Пользователям Windows, пожалуйста, обратите внимание, что FAT и VFAT (FAT32) не считаются подходящими для использования в производственной среде с MySQL. Используйте NTFS вместо них.
Если вы столкнулись с ошибкой заполнения таблицы, есть несколько причин, по которым это могло произойти:
Диск может быть заполнен.
-
Вы используете
InnoDBтаблицы и закончилось место в файле пространства таблицInnoDB. Максимальный размер пространства таблиц также является максимальным размером таблицы. Ограничения размера пространства таблиц см. в разделе 17.21, «InnoDB Limits».В целом, рекомендуется разделение таблиц на несколько файлов пространства таблиц для таблиц размером более 1 ТБ.
Вы достигли ограничения размера файла операционной системы. Например, вы используете
MyISAMтаблицы на операционной системе, поддерживающей файлы размером только до 2 ГБ, и вы достигли этого предела для файла данных или файла индекса.-
Вы используете
MyISAMтаблицу, и требуемое для неё пространство превышает разрешённый размер внутреннего указателя.MyISAMпо умолчанию позволяет файлам данных и индексов расти до 256 ТБ, но это ограничение можно изменить до максимального разрешенного размера 65 536 ТБ (2567 − 1 байт).Если вам нужна
MyISAMтаблица, размер которой превышает значение по умолчанию, а ваша операционная система поддерживает большие файлы, то операторCREATE TABLEподдерживает опцииAVG_ROW_LENGTHиMAX_ROWS. См. раздел 15.1.21, «CREATE TABLE Statement». Сервер использует эти опции для определения допустимого размера таблицы.Если размер указателя слишком мал для существующей таблицы, вы можете изменить опции с помощью
ALTER TABLE, чтобы увеличить максимальный допустимый размер таблицы. См. раздел 15.1.9, «ALTER TABLE Statement».ALTER TABLE
tbl_nameMAX_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 позволяет таблицам достигать размера до 4 ГБ; значение 6 позволяет достигать 256 ТБ. Таблицы, использующие формат фиксированного хранения, имеют больший максимальный размер данных.Характеристики форматов хранения см. в разделе 18.2.3, «MyISAM Table Storage Formats».
Вы можете проверить максимальные размеры данных и индексов с помощью следующего оператора:
SHOW TABLE STATUS FROM
db_nameLIKE 'tbl_name';Вы также можете использовать myisamchk -dv /path/to/table-index-file. См. раздел 15.7.7, «SHOW Statements», или раздел 6.6.4, «myisamchk — MyISAM Table-Maintenance Utility».
Другие способы решения ограничений размера файлов для
MyISAMтаблиц следующие:Если ваша большая таблица только для чтения, вы можете использовать myisampack для её сжатия. myisampack обычно сжимает таблицу как минимум на 50%, поэтому вы можете иметь, по сути, гораздо более крупные таблицы. myisampack также может объединить несколько таблиц в одну. См. раздел 6.6.6, «myisampack — Generate Compressed, Read-Only MyISAM Tables».
MySQL включает библиотеку
MERGE, которая позволяет обрабатывать наборMyISAMтаблиц с одинаковой структурой как однуMERGEтаблицу. См. раздел 18.7, «MERGE Storage Engine».
Вы используете
MEMORY(HEAP) движок хранения; в этом случае вам нужно увеличить значение системной переменнойmax_heap_table_size. См. раздел 7.1.8, «Server System Variables».
© 2025 Oracle
Licensed under the GPLv2 License.