Как добавить индекс в 18 GB innodb таблицу mysql, не влияя на производительность?

Как добавить индекс в 18-битную таблицу mysql innodb, не влияя на производительность? К таблице часто обращаются, я попытался изменить таблицу только сейчас, и, похоже, она заблокировала более 200 запросов, и это плохо для производительности. Есть ли другие способы сделать это?

Related of "Как добавить индекс в 18 GB innodb таблицу mysql, не влияя на производительность?"

TheOnly92 – есть еще один вариант, который используется даже для амазонки и ebay. это не считается «плохой» формой, чтобы иметь нерегулярные периоды обслуживания, когда сайт является неприемлемым. в этих случаях вы увидите страницу поддержки 404, отображаемую с помощью дружественного пользователю сообщения, в котором говорится, что сайт подвергается существенным обновлениям между часами …. и т. д.

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

Джим

Другой вариант – использовать pt-online-schema-change . Он создаст копию старой таблицы с новым индексом и создаст триггер, который будет отображать все изменения от старой таблицы до новой. В конце он изменит имя старой таблицы.

Это зависит от того, насколько важно, чтобы вы не потеряли новые записи?

Дублируйте структуру таблицы, используя CREATE TABLE ... LIKE ... , добавьте новый индекс в дублируемую таблицу, выполните INSERT INTO ... SELECT ... FROM ... чтобы захватить все данные, затем запустите пару ALTER s, чтобы переименовать старую таблицу, а затем переименуйте новую таблицу в имя старой таблицы.

К сожалению, если какие-либо данные в старой таблице изменяются между тем, как выполняется INSERT / SELECT, и таблицы переименовываются, они могут быть потеряны. Возможно, можно вернуть данные с помощью одного из инструментов Maatkit для сравнения таблиц.

Другая распространенная модель основана на дублировании аппаратного обеспечения. Настройте ведомое устройство репликации, добавьте туда индекс, а затем сделайте ведомый мастером.

Ни один из них, скорее всего, не будет быстрым, но они, вероятно, будут быстрее, чем добавление индекса напрямую. Однако, если вы можете позволить себе простои, вам действительно нужно просто снять систему, пока вы изменяете / копируете / переключаете ведомые устройства. Не беспокоясь о том, чтобы синхронизировать данные, ваша жизнь станет проще.

(Возможно, вы захотите рассмотреть возможность переключения на базу данных, которая позволяет добавлять индексы без блокировки таблицы .)