Прожорливая ошибка в MySQL


Oracle выпустила новую версию MySQL для исправления ошибки, при которой MySQL использует все доступное дисковое пространство при изменении записи.

Ошибка ограничена таблицами на основе механизма хранения MySQL InnoDB.

Хартмут Хольцграфе из SkySQL показал в своем блоге, как ошибка может съедать дисковое пространство. В таблице с двумя индексами этот SQL использует все доступное пространство:

ОБНОВЛЕНИЕ t1 SET id2 = id2 + 1, b = null ГДЕ a равно нулю и id1 = 2;

Что происходит, остается загадкой, потому что табличное пространство InnoDB расширяется, даже если нет необходимости в дополнительном дисковом пространстве из-за дополнительных данных или увеличения размера индекса.

По словам Питера Лаурсена из Webyog, вариантов не так много. Если innodb_file_per_table не используется, ваш единственный выбор — восстановить на новый сервер или экземпляр InnoDB, сбросив ваши файлы.

Если вы используете опцию innodb_file_per_table, Лорен предполагает, что использование Optimize Table для затронутых таблиц может освободить дисковое пространство, которое использовалось неправильно.

Однако он указывает, что для этого все еще требуется, чтобы на диске было достаточно свободного места для запуска Optimize Table. Holzgraefe предполагает, что отключение функции оптимизатора index_merge является жизнеспособным решением:

optimizer_switch = ‘index_merge = off’;

Однако ситуация далека от идеальной. Как отмечает Лаурсен,

«Настоящей проблемой здесь является отсутствие у Oracle желания раскрыть точные условия этой ошибки для затронутых пользователей (и способы ее устранения, если они будут затронуты)».

Однако в новом выпуске MySQL 5.5.25a проблема решена.


Добавить комментарий