Mysql Прекратить выполнение команды OPTIMIZE?

Около 1 часа назад я начал оптимизацию MySQL для таблицы MyISAM. что составляет ~ 20G с 250M строками. На данный момент он создает db_name.TMD, который составляет 1G и растет.

Насколько я понимаю, MySQL теперь воссоздает оптимизированную копию моей таблицы, если мое предположение верно, то процесс оптимизации не должен повредить исходную БД ?? Кроме того, как убить только процесс оптимизации?
И что произойдет, если во время оптимизации закончится место на диске???

КСТАТИ. Я только что проверил список процессов и текущее состояние: Восстановить с помощью кэша ключей. Хорошо, еще вопросы: Таблица, которую я начал оптимизировать, имеет: 10442 МБ файла .MYD и 9319 МБ .MYI. Сколько места займет процесс оптимизации? ~ Размер файла .MYD или размер файла MYD + MYI?


person Alex K    schedule 29.12.2015    source источник
comment
Почему вы работаете OPTIMIZE? Он почти никогда не нужен.   -  person Rick James    schedule 29.12.2015
comment
Существует настройка, позволяющая использовать восстановление путем сортировки. Это должно быть намного быстрее (но не предотвращает нехватку места на диске).   -  person Rick James    schedule 29.12.2015
comment
На второй машине я изменил настройки, сделал ремонт путем сортировки, который занял всего около 1 часа. Что касается того, почему я запустил оптимизацию, то из чистого интереса, оптимизирует ли это пространство. что он сделал ~ 1,5 ГБ из файла MYI.   -  person Alex K    schedule 30.12.2015
comment
Таблица размером 20 ГБ потребует около 20 ГБ дополнительного дискового пространства для выполнения OPTIMIZE; может больше, может меньше. Это похоже на индикатор выполнения — он не может быть точным, если не выполнить всю задачу целиком.   -  person Rick James    schedule 30.12.2015
comment
1,5 / 9,3 сохранено - (1) вы потеряете место по мере вставки большего количества строк, (2) запросы не будут сильно ускоряться. (3) Стоило ли это усилий?   -  person Rick James    schedule 30.12.2015


Ответы (1)


В прошлом я несколько раз останавливал процесс оптимизации без каких-либо побочных эффектов. Тем не менее, у меня была резервная копия на случай проблем.

Чтобы остановить процесс, я использовал KILL process_id, где process_id берется из результатов SHOW PROCESSLIST.

Объем пространства, необходимый для оптимизации, зависит от количества строк, помеченных как удаленные в вашей таблице.

person Richard St-Cyr    schedule 29.12.2015
comment
Я также остановил процесс, так как у меня закончилось место, но база данных была отмечена как аварийная. копирование в настоящее время на другой компьютер с большим количеством свободного места для восстановления и оптимизации - person Alex K; 29.12.2015