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 бок о бок на одном компьютере, что вполне возможно.