“удаление базы данных mysql” требует времени — почему?

StackOverflow https://stackoverflow.com/questions/150058

  •  02-07-2019
  •  | 
  •  

Вопрос

mysql5.0 с парой баз данных "A" и "B", обе с большими таблицами innodb."удалить базу данных A"; замораживает базу данных "B" на пару минут.В этот момент ничто не использует "A", так почему же это такая интенсивная операция?

Бонусные баллы:Учитывая, что мы используем "A", загружаем данные в "B", а затем переключаемся на использование "B", как мы можем сделать это быстрее?Удаление баз данных - это не то, что обычно приходится делать постоянно, так что это немного не по плану.

Это было полезно?

Решение

Так что я не уверен Ответ Мэтта Роджиша это поможет на 100%.

Проблема в том, что MySQL * имеет мьютекс (взаимоисключающую блокировку) вокруг открывающихся и закрывающихся таблиц, так что это в основном означает, что если таблица находится в процессе закрытия / удаления, НЕТ можно открыть и другие столы.

Это описано моим коллегой здесь:http://www.mysqlperformanceblog.com/2009/06/16/slow-drop-table/

Одной из отличных стратегий снижения воздействия является использование файловой системы, такой как XFS.

Обходной путь уродлив.По сути, вам нужно просмотреть все данные в таблицах, прежде чем удалять их (см. Комментарий № 11 по ссылке выше).

Другие советы

После ухода скаффмана:

Измените свой my.cnf (и перезапустите MySQL), чтобы включить:

innodb_file_per_table = 1

(http://mysqldba.blogspot.com/2006/12/innodbfilepertable.html)

Это предоставит вашим базам данных выделенное файловое хранилище и выведет их из общего пула.Затем это позволит вам делать забавные вещи, например размещать таблицы / индексы на разных физических дисках, чтобы еще больше разделить ввод-вывод и повысить производительность.

Обратите внимание, что это не изменяет существующие таблицы;вам придется потрудиться , чтобы поместить их в их собственный файл (http://capttofu.livejournal.com/11791.html).

По умолчанию все базы данных innodb в данной установке сервера mysql используют один и тот же физический пул файлов данных, поэтому, возможно, "удаление базы данных A" может повлиять на базу данных B.Поскольку "удаление базы данных", вероятно, повлечет за собой интенсивную реорганизацию файлов данных innodb, вполне возможно, что это блокирующая операция, либо из-за интенсивности операции, либо по замыслу.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top