#Что означает неисправность и в каких условиях возникает
Файл ibtmp1 в каталоге данных MySQL/Percona увеличивается при сортировках и временных таблицах, иногда занимая десятки гигабайт. Для InnoDB это глобальное временное табличное пространство; его нельзя удалять вручную при работающем сервере. Нужно отличить рабочее пространство InnoDB от временных файлов операционной системы и выяснить запрос, который создаёт большие промежуточные результаты. Освобождённое пространство ibtmp1 может повторно использоваться, даже если размер файла не уменьшается.
#Возможные причины: как различить
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Большие временные результаты запросовJOIN, GROUP BY, ORDER BY и пользовательские временные таблицы приводят к записи на диск. | Рост совпадает с выполнением тяжёлого отчёта или импорта. | Проверить план запроса и сокращение промежуточного набора. |
| Много параллельных временных таблицНесколько копий отчёта выполняются одновременно. | Количество активных запросов и нагрузка растут вместе с ibtmp1. | Ограничить параллельность фоновых задач. |
| Обычное повторное использование файлаПосле завершения запроса файл остаётся большим на диске. | Процессы закончились, но ibtmp1 не уменьшился; в свободных страницах возможна повторная запись. | Планировать обслуживание и следить за свободным местом, не удалять файл. |
#Пошаговая диагностика и устранение
- Убедитесь, что найден именно ibtmp1Подключитесь по SSH к серверу MySQL. В клиенте mysql выполните
SHOW VARIABLES LIKE 'datadir';иSHOW VARIABLES LIKE 'innodb_temp_data_file_path';. Сопоставьте каталог данных и путь к файлу. Не полагайтесь на путь/var/lib/mysql/ibtmp1по умолчанию: на конкретном сервере каталог может отличаться. - Измерьте свободное место без измененийНа Linux откройте терминал и запустите
df -hдля файловой системы базы иdu -hдля конкретного файла, если у вас есть доступ. Сохраните значения и сравните через 10–15 минут; если свободного места осталось критически мало, сообщите администратору сразу. Не переносите файл на лету и не создавайте символьную ссылку без согласованной процедуры. - Сопоставьте рост с запросамиВ административной сессии
SHOW FULL PROCESSLIST;покажет активные запросы. Найдите долгие операции с Using temporary/Using filesort по EXPLAIN и временем отчёта. Не считайте все SELECT причиной: требуется совпадение по времени и объёму. Если право PROCESS недоступно, попросите DBA собирать диагностику вместо повышения прав учётной записи сайта. - Проверьте показатели временных таблицВ mysql выполните
SHOW GLOBAL STATUS LIKE 'Created_tmp%';, запишите значения с временем и повторите во время отчёта.Created_tmp_disk_tables— накопительный счётчик с момента запуска и не даёт прямого размера ibtmp1. По изменению счётчиков и времени запроса определяйте, когда растёт потребность во временных структурах. - Найдите тяжёлый SQL и проверьте планНа копии данных используйте EXPLAIN для SELECT из отчёта. Определите большие промежуточные выборки, отсутствие ограничений WHERE и дорогие GROUP BY/ORDER BY. Сначала уменьшите объём данных и добавьте обоснованный индекс в тестовой среде; не увеличивайте без расчёта
tmp_table_sizeилиmax_heap_table_sizeна рабочем сервере. - Проверьте, освобождается ли рабочее пространствоДождитесь завершения тяжёлого запроса и попробуйте повторить операцию сопоставимого размера в контролируемом тестовом окне; файл может не расти дальше, поскольку использует уже выделенные страницы. Само отсутствие уменьшения размера не означает утечку данных и не требует аварийного рестарта.
- Планируйте уменьшение файла только при необходимостиЕсли большой ibtmp1 мешает ёмкости диска, согласуйте штатную остановку и запуск MySQL в окно обслуживания после полной резервной копии и оценки репликации. Глобальное временное табличное пространство создаётся при запуске заново, однако рестарт прерывает все соединения. Запрещено удалять ibtmp1 вручную у работающего процесса mysqld.
- Ограничьте дальнейший рост через нагрузкуПосле оптимизации запросов проверьте расписание отчётов и число одновременных процессов, чтобы временные объекты не создавались одновременно. При каждом изменении сохраните прежние настройки планировщика и повторите тест. Если рост повторяется, соберите имена запросов и график размера файла, а не пытайтесь циклически перезапускать базу.
- Команды для отдельных ситуацийВыберите только подходящий вариант. Это не одна последовательность: часть команд диагностирует проблему, а часть меняет настройки или данные.
#Как проверить исправление и что делать, если оно не помогло
Успех — после оптимизации крупного отчёта рост ibtmp1 останавливается или становится прогнозируемым, файловая система имеет запас места, запросы выполняются быстрее. Если размер стабилен, а места достаточно, срочное уменьшение не нужно; запланируйте обслуживание, если объём действительно мешает работе.