Mysql "drop database" занимает время - почему?
mysql5.0 с парой баз данных "A" и "B", как с большими таблицами innodb. "drop database A;" задерживает базу данных "B" на пару минут. Ничто не использует "A" в этот момент, так почему же такая интенсивная операция?
Бонусные баллы: учитывая, что мы используем "A" , загружаем данные в "B", а затем переключаемся на "B", как мы можем сделать это быстрее? Отбрасывание баз данных - это не то, что обычно приходится делать все время, так что это немного отличается от диаграмм.
Ответы
Ответ 1
Итак, я не уверен, Ответ Мэтта Рогиша поможет 100%.
Проблема заключается в том, что MySQL * имеет взаимную блокировку (взаимно исключающую блокировку) вокруг таблиц открытия и закрытия, поэтому в основном это означает, что если таблица находится в процессе закрытия/удаления, никакие другие таблицы не могут быть открыты.
Это описано моим коллегой здесь:
http://www.mysqlperformanceblog.com/2009/06/16/slow-drop-table/
Одна отличная стратегия снижения ударов заключается в использовании файловой системы, такой как XFS.
Обходной путь является уродливым. По сути, вам нужно прикупить все данные в таблицах перед их отбрасыванием (см. Комментарий № 11 по ссылке выше).
Ответ 2
После скаффмана:
Измените my.cnf(и перезапустите MySQL), чтобы включить:
innodb_file_per_table = 1
(http://mysqldba.blogspot.com/2006/12/innodbfilepertable.html)
Это даст вашим базам данных выделенное хранилище файлов и выведет их из общего пула. Это позволит вам делать забавные вещи, например, размещать таблицы/индексы на разных физических дисках, чтобы еще больше разделить операции ввода-вывода и повысить производительность.
Примечание. Это не изменяет существующие таблицы; вам нужно будет выполнить работу, чтобы получить их в своем собственном файле (http://capttofu.livejournal.com/11791.html).
Ответ 3
По умолчанию все базы данных innodb в заданной установке сервера mysql используют один и тот же физический пул файлов данных, поэтому, возможно, "drop database A" может повлиять на базу данных B. Так как "база данных перетаскивания", вероятно, будет связана с тяжелым повторным назначением innodb файлов данных, можно предположить, что это операция блокировки либо из-за интенсивности операции, либо по дизайну.
Однако, я думаю, вы можете сделать каждую базу данных различными физическими файлами, хотя я сам не пробовал это, поэтому вам придется разобраться в деталях для себя. В противном случае вам может понадобиться использовать две разные установки mysql бок о бок на одном компьютере, что вполне возможно.