Как я могу ускорить восстановление таблицы в MySQL при изменении схемы? - PullRequest
1 голос
/ 27 сентября 2011

У меня относительно большая таблица MySQL InnoDB (сжатая), и мне иногда нужно изменить ее схему (увеличение размера столбца или добавление поля).

Для таблицы 500 МБ требуется около 1 часа смиллионы строк, но сервер, кажется, не очень загружен (процессор @ 5%, мало используемой оперативной памяти и 2,5 МБ / с для операций ввода-вывода).

Таблица не используется в рабочей средепоэтому одновременных запросов нет.Существует только первичный индекс (в первых 5 столбцах) и одно ограничение внешнего ключа.

Есть ли у вас какие-либо предложения по ускорению процесса изменения таблицы?

Ответы [ 2 ]

1 голос
/ 13 октября 2011

Смена механизма хранения (на двигатели более нового поколения, такие как TokuDB ) кажется правильным решением, пока InnoDB не будет «исправлен».

0 голосов
/ 28 сентября 2011

Было бы полезно узнать точные определения таблиц и первичных ключей / индексов, а также, что менее важно, число строк до ближайшего миллиона, хотя я бы предположил, что размер таблицы составляет всего 500 МБ, а это, вероятно, менее 20 миллионов строк. Кроме того, ваш подход к изменению таблицы - вы создаете новую схему и вставляете в нее, или используете таблицу изменения и т. Д.

Я имел успех в этой области раньше с такими подходами, как

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