Перестроить индекс InnoDB ONLINE, чтобы предотвратить тайм-ауты? - PullRequest
2 голосов
/ 18 января 2010

Когда я обновляю особенно большую таблицу, время обновления истекает, поскольку таблица блокируется, а индексы перестраиваются. Есть ли способ перестроить индекс ONLINE (т. Е. Oracle), чтобы обновление не прекращалось?

Ответы [ 3 ]

0 голосов
/ 19 сентября 2018

optimize table перестраивает индексы онлайн

OPTIMIZE TABLE использует оперативный DDL для обычных и многораздельных таблиц InnoDB, что сокращает время простоя при одновременных операциях DML. Перестройка таблицы, вызванная OPTIMIZE TABLE и выполненная под прикрытием ALTER TABLE ... FORCE, завершена на месте. Эксклюзивная блокировка таблицы выполняется ненадолго на этапе подготовки и на этапе фиксации операции. На этапе подготовки метаданные обновляются и создается промежуточная таблица. На этапе фиксации изменения метаданных таблицы фиксируются.

Источник: https://dev.mysql.com/doc/refman/8.0/en/optimize-table.html

Но! Я много слышал о том, что вам не следует перестраивать индексы в InnoDB, потому что они всегда актуальны. Google немного об этом.

0 голосов
/ 22 сентября 2018

pt-online-schema-change может использоваться для оптимизации таблицы. OPTIMIZE TABLE - это фактически noop ALTER TABLE.

pt-online-schema-change --alter "ENGINE=InnoDB" D=sakila,t=actor
0 голосов
/ 16 июня 2010

Простой ответ: нет, нет пути.

Более сложный ответ: вы можете эмулировать добавление индексов в режиме онлайн, используя репликацию на основе операторов и сначала добавляя индекс в ведомое устройство, а затем делая его главным. Вот почему люди используют такие пакеты, как http://mysql -mmm.org / .

...