Перестройка индексов MySQL - PullRequest
0 голосов
/ 25 сентября 2011

Я должен перестроить структуру индекса из-за плохого дизайна индекса.У меня есть около 200 таблиц с несколькими тысячами до 20 миллионов строк на таблицу.Чтобы вручную удалить индексы и создать новые индексы в системе жизней, потребуются дни.

Так вот моя мысль:

  1. Стираю схему (после резервного копирования;)

  2. Создайте новую схему

  3. Запустите полную серию с операторами CREATE TABLE, объявляющими необходимые Первичные ключи и индексы (занимает минуту или около того)

  4. Запустите RESTORE DB в эту новую схему (это может занять 2 часа - но не дни)

Имеет ли это смысл?

1 Ответ

1 голос
/ 26 сентября 2011

Я думаю, что предложенное вами решение аналогично, но вы можете запустить новое ведомое устройство репликации, а затем сначала внести изменения в схему на этом компьютере.Пока вы только вносите изменения в индексы, события будут по-прежнему применяться повторно без ошибок.

После того, как изменения будут завершены, вы сможете: 1) повысить статус подчиненного до ведущего, применить те же изменения к подчиненному изатем переключитесь назад или 2) остановите оба экземпляра MySQL и скопируйте файлы необработанных данных с ведомого на ведущий.

Используя этот метод, индексы по-прежнему перестраиваются, но действительно имеет значение, сколько времени потребуется, чтобы сделатьизменения на раб.Единственное время простоя - это длительность копирования файлов.

Существуют и другие решения, которые могут выполнять неблокирующие изменения в таблицах без использования ведомого устройства, такие как oak-online-alter-table.http://openarkkit.googlecode.com/svn/trunk/openarkkit/doc/html/oak-online-alter-table.html и аналогичный инструмент, разработанный Facebook http://www.facebook.com/notes/mysql-at-facebook/online-schema-change-for-mysql/430801045932.

...