Центр Диагностики & База Системных Ошибок

Решения для Windows Server, Active Directory, 1С, СУБД, Linux, Cisco, MikroTik и IP-телефонии.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, баз данных и сетевого оборудования. Перед выполнением действий обязательно создайте резервную копию. При отсутствии необходимой квалификации обратитесь к ИТ-специалистам.
MYSQL-ERR-1114 Linux / DevOps

MySQL Ошибка 1114 (HY000): The table 'table_name' is full

Обновлено: 21.08.2026  ·  Официальная база знаний

Причины переполнения таблиц в различных движках MySQL

Системный код MySQL Error 1114 (SQLSTATE HY000): «The table 'table_name' is full» свидетельствует о том, что целевая таблица достигла верхнего предела емкости, установленного на уровне конфигурации СУБД, параметров движка хранения (Storage Engine) или операционной системы. Механизм возникновения ошибки кардинально различается в зависимости от контекста:

  • Движок MEMORY (HEAP): Таблица в оперативной памяти превысила лимит системной переменной max_heap_table_size.
  • Неявные временные таблицы (Implicit Temporary Tables): Сложный аналитический запрос с тяжелыми GROUP BY / DISTINCT / ORDER BY создал временную таблицу в памяти, которая уперлась в лимит tmp_table_size.
  • Табличные пространства InnoDB (System Tablespace): Системный файл ibdata1 или отдельный .ibd файл достиг максимального фиксированного размера или уперся в лимит файловой системы (диск заполнен).

Бизнес-риски

Аварийная остановка записи клиентских сессий, сбой выполнения поисковых фильтров в интернет-магазинах, невозможность формирования регламентных отчетов.

Диагностика ограничений по типам таблиц

Тип таблицы / ДвижокКонтролирующий параметрДействие по устранению
Временные таблицы в RAMtmp_table_size и max_heap_table_sizeСинхронное увеличение обоих параметров в my.cnf.
Таблицы движка MEMORYmax_heap_table_sizeУвеличение лимита и выполнение ALTER TABLE t ENGINE=MEMORY.
InnoDB системный файлinnodb_data_file_pathДобавление флага :autoextend.

Регламент увеличения лимитов и устранения ошибки Table is full

Сценарий 1: Увеличение размера временных таблиц в памяти (tmp_table_size)

Для предотвращения сброса временных таблиц на диск или их переполнения:

# 1. Проверка текущих лимитов в консоли MySQL (значения в байтах):
SHOW VARIABLES LIKE 'tmp_table_size';
SHOW VARIABLES LIKE 'max_heap_table_size';

# 2. Динамическое увеличение до 256 МБ (оба параметра должны быть равны!):
SET GLOBAL tmp_table_size = 268435456;
SET GLOBAL max_heap_table_size = 268435456;

# 3. Персистентное сохранение в my.cnf:
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
tmp_table_size = 256M
max_heap_table_size = 256M

Сценарий 2: Исправление размера MEMORY-таблицы приложения

Если приложение использует постоянную таблицу с ENGINE=MEMORY:

-- 1. Увеличьте лимит сессии/сервера:
SET GLOBAL max_heap_table_size = 512 * 1024 * 1024;

-- 2. Пересоздайте структуру таблицы для применения нового лимита объема памяти:
ALTER TABLE `my_memory_table` ENGINE = MEMORY;

Сценарий 3: Настройка авторасширения системного пространства InnoDB (ibdata1)

Если в конфигурации было задано фиксированное табличное пространство без autoextend:

# Проверьте секцию [mysqld] в my.cnf:
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

# Конфигурация должна содержать autoextend:
[mysqld]
innodb_data_file_path = ibdata1:12M:autoextend

# Убедитесь, что включен режим отдельного файла на каждую таблицу:
innodb_file_per_table = 1

Типовые ошибки администраторов

  • Установка tmp_table_size = 8G на многопоточном сервере: Временные таблицы выделяются под каждый поток индивидуально. При 200 одновременных тяжелых запросах сервер мгновенно исчерпает всю оперативную память и упадет в OOM.
  • Игнорирование движка TempTable в MySQL 8.0: В MySQL 8.0 за временные таблицы отвечает переменная temptable_max_ram (по умолчанию 1 Гб), после чего данные сбрасываются в анонимные memory-mapped файлы.
Запросы падают с ошибкой переполнения таблиц при сложной аналитике?
Специалисты ITSTM настроят буферы временных таблиц, оптимизируют тяжелые SQL-запросы и предотвратят исчерпание RAM.
Практический опыт инженера: Избегайте использования типов BLOB/TEXT в запросах, требующих сортировки или группировки. Наличие BLOB/TEXT колонок в старых версиях MySQL автоматически запрещает создание временных таблиц в RAM и сразу направляет запись на медленный диск.

Частые вопросы (FAQ)

Почему при увеличении tmp_table_size ошибка 1114 осталась?

MySQL берет наименьшее значение из двух параметров: tmp_table_size и max_heap_table_size. Необходимо синхронно увеличивать ОБЕ переменные.

Что происходит с временной таблицей, когда она превышает tmp_table_size?

В MySQL 5.7 движок автоматически конвертирует ее во временную таблицу на диске (InnoDB/MyISAM). Если на диске в /tmp нет места, возвращается Ошибка 1114.

Как перевести таблицу MEMORY на стандартный диск InnoDB?

Выполните команду ALTER TABLE `my_table` ENGINE = InnoDB;.

Как мониторить, сколько временных таблиц создается на диске?

Следите за переменными SHOW STATUS LIKE 'Created_tmp_disk_tables'; и Created_tmp_tables;. Высокий процент Created_tmp_disk_tables говорит о нехватке буферов или отсутствии индексов.