Mysql занимает до 50% процессорного времени после прерывания запроса DELETE - PullRequest
0 голосов
/ 07 февраля 2012

У меня есть проблема, с которой я никогда не сталкивался. Вчера я очищал базу данных клиентов и в таблице со статистикой посещений было 15 ГБ данных, поэтому я решил удалить все строки старше 1 февраля, потому что у нас есть все эти данные, хранимые в ежедневной статистике, и нет необходимости сохранять эти старые отдельные статистические данные.

Я пытался запустить DELETE FROM sv WHERE datetime < ? (индекс по дате и времени) и DELETE FROM sv WHERE id < ? (основной индекс по идентификатору), но оба запроса, где они выполнялись слишком медленно, занимали более 15 минут. Поэтому я только что отменил эти запросы, нажав Ctrl + C.

Тогда я подумал, что лучше будет скопировать структуру таблицы и строки февраля и удалить старую таблицу, но сегодня Я обнаружил, что процесс mysql на сервере работает до 50% использования ЦП с нормальным трафиком на нашем сайт.

После перемещения таблицы SV из папки базы данных (таблица myIsam) использование по-прежнему до 50% .

Сначала я подумал, что таблица, должно быть, повреждена, но phpmyadmin не показывает, что она помечена как сбойная.

Как я могу отладить это? Что там произошло?

1 Ответ

1 голос
/ 07 февраля 2012

Ваша система, вероятно, реиндексирует всю таблицу в результате уничтоженного запроса. Если это было в транзакции в INNODB, система также перестраивает таблицу, а затем воссоздает индекс.

Я бы посмотрел на iostat и посмотрел бы на конфликты дисков.

...