DevGang
Авторизоваться

Многопоточный ALTER TABLE с pt-online-schema-change и myloader

pt-online-schema-change эмулирует способ, которым MySQL изменяет внутренне таблицы, но работает с ее копией, которую вы хотите изменить. Он выполняет инструкции INSERT для импорта данных, которые выполняются в одном соединении для заполнения новой таблицы. В этом репозитории есть скрипт myloader_pt-osc.sh, который использует myloader для выполнения параллельных вставок, вместо использования внутренних инструментов pt-online-schema-change, но также использует ее исправленную версию.

Патч pt-online-schema-change

Есть 2 изменения, которые нам нужно выполнить для pt-online-schema-change:

1) иметь возможность остановить выполнение после создания копии таблицы.

2) сообщить pt-online-schema-change, что данные не нужно импортировать.  

Мы добавляем параметр –no-data, чтобы сообщить pt-online-schema-change не импортировать данные в новую таблицу. pt-online-schema-change может остановить выполнение с параметром –pause-file. Файл патча содержит код для остановки выполнения при использовании –no-data и –pause-file.

Процедура

Скрипт выполняет несколько задач, основными из которых являются:

  • Создание каталога резервных копий в формате, который может использовать myloader.
  • Запуск pt-online-schema-change, который будет остановлен после создания новой таблицы и триггеров.
  • Запуск выполнения myloader.
  • После замены myloader, возобновите pt-online-schema-change, чтобы поменять местами таблицы.

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

Задержки

sysbench с 10м строками была создана для выполнения таблицы alter с “engine innodb", которая похожа на таблицу оптимизации, я использовал эти два выполнения, для сравнения:

~/git/myloader_pt-osc/myloader_pt-osc.sh -D sbtest -T sbtest1 --alter 'engine innodb' --chunk-size 10000 -t 10
pt-online-schema-change --alter 'engine innodb' --execute D=sbtest,t=sbtest1 --chunk-size 10000

Размер фрагмента и количество потоков были переменными для создания этих графиков:

На следующем графике показано улучшение в процентах:

Случаи использования

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

  • Регулирующий механизм pt-online-schema-change не замедлит вставку, ведомые устройства могут отстать.
  • Поскольку предполагается использовать несколько потоков, сервер получит больше нагрузки и не будет иметь механизма для его остановки.

Вывод и ожидание

По сути, это оболочка pt-online-schema-change, которая использует myloader для параллельного выполнения INSERT, что ускоряет изменение таблицы. Это может быть использовано, когда нужно сократить время, и нагрузка не является проблемой.

Источник:

#MySQL
Комментарии
Чтобы оставить комментарий, необходимо авторизоваться