Контекст
6 марта 2026 года продакшн-сервер MariaDB 10.11.15, контролируемый PmaControl, испытал серьёзный инцидент. В отличие от обычных сбоев (OOM, segfault), этот имел беспрецедентные симптомы:
RocksDB: Error opening instance, Status Code: 2,
Status: Corruption: truncated record body
Incorrect information in file: './pmacontrol/ts_value_general_int.frm'
Can't init tc log
Aborting
Сервер перезапускался в цикле несколько раз, прежде чем стабилизироваться, с ошибками .frm mismatch на нескольких таблицах временных рядов.
Тикет MDEV-39044
После расследования мы коррелировали этот инцидент с тикетом MariaDB MDEV-39044:
MyRocks corruption after restart during/after ALTER workload: Corruption: truncated record body, .frm mismatch, no crash log, no OOM killer
Что описывает тикет
Тикет документирует воспроизводимый сценарий коррупции:
- Объёмные партиционированные таблицы RocksDB — именно то, что PmaControl использует для метрик (таблицы
ts_value_*, партиционированные по дням) ALTER TABLEпод нагрузкой записи — добавление партиций, пока приложение непрерывно пишет- Одновременное давление памяти InnoDB — таблицы InnoDB и RocksDB сосуществуют на одном сервере
- Никаких следов в ядре — нет OOM killer, нет segfault, нет crash log
Почему это коварно
Самый опасный аспект тикета: отсутствие crash log — это ожидаемое поведение в этом сценарии. Сервер перезапускается, выполняет InnoDB crash recovery, но метаданные RocksDB повреждены (.frm mismatch).
DBA, который смотрит только в journalctl или dmesg, ничего не найдёт. Он классифицирует инцидент как «необъяснимый перезапуск» и пойдёт дальше.
Наш конкретный случай
Затронутые таблицы
Все — партиционированные по дням таблицы RocksDB, массово нагруженные записью:
ts_value_general_int— целочисленные метрики (status variables, счётчики)ts_value_general_json— сложные JSON-метрикиts_mysql_digest_stat— статистика запросов (дайджесты)ts_value_general_text— текстовые метрикиts_value_slave_int— метрики репликацииts_value_slave_text— детальные состояния репликации
Вероятный триггер
PmaControl автоматически обслуживает партиции этих таблиц: добавление партиции следующего дня, удаление просроченных партиций. Это ALTER TABLE ... ADD PARTITION / DROP PARTITION, выполняемые на таблицах в десятки гигабайт, пока воркеры сбора метрик непрерывно пишут (каждые 10 секунд на каждый контролируемый сервер).
Сигналы давления памяти
Перед сбоем лог MariaDB показывает:
InnoDB: Memory pressure event disregarded
Тикет MDEV-39044 прямо указывает этот паттерн как усугубляющий фактор. Давление памяти InnoDB не вызывает коррупцию напрямую, но создаёт контекст, в котором DDL RocksDB становится неатомарным.
Как PmaControl обнаружил инцидент
- Сброс uptime обнаружен за 10 секунд через временной ряд
ts_variable.uptime - Оповещение Telegram отправлено немедленно
- Автоматическая корреляция с error log: обнаружение сигнатур
crash recovery+truncated record body - Ретроспективный анализ: метрики предыдущего часа (потоки, память, CPU) были нормальными — подтверждая, что это не проблема классической нагрузки
Рекомендации
Немедленные действия
-
Не выполнять DDL на таблицах RocksDB под нагрузкой записи. Планировать
ALTER TABLE ... ADD/DROP PARTITIONна окна низкой активности. -
Мониторить ошибки
.frmв error log. Это первый индикатор коррупции после DDL. -
Следить за тикетом MDEV-39044 для получения официального исправления.
Структурные действия
-
Разделить движки: по возможности не смешивать InnoDB и RocksDB на одном сервере для критических таблиц.
-
Рассмотреть миграцию горячих таблиц на InnoDB. RocksDB отлично подходит для последовательной записи, но его DDL не атомарны под нагрузкой.
-
Рассчитать память для предотвращения давления InnoDB, которое усугубляет проблему. Смотрите нашу статью об OOM killer для расчёта наихудшего случая.
Чем это не является
- Это не проблема оборудования (диск, RAM)
- Это не проблема конфигурации MySQL (параметры корректны)
- Это не воспроизводится по требованию (это race condition в движке RocksDB/DDL)
Это баг движка, задокументированный самой MariaDB.
Заключение
MDEV-39044 — это напоминание о том, что использование альтернативных движков хранения (RocksDB, TokuDB) на продакшн-нагрузках требует особой бдительности при DDL. Отсутствие crash log не означает отсутствие коррупции.
PmaControl обнаруживает такие инциденты через мониторинг uptime + корреляцию error log, там, где классические инструменты ничего не видят.
Комментарии (0)
Комментариев пока нет.
Оставить комментарий