pt-online-schema-change увеличивает так много потоков копирования?

На днях я использую pt-online-schema-change для добавления столбца и индекса в таблицу, таблица содержит около 1 миллиона строк, а размер файла .ibd составляет около 5 ГБ.

Я пытался несколько раз, каждый раз, когда я получал сообщение об ошибке, говорящее, что процесс прерван из-за достижения критической нагрузки (это threads_running = 60, я всегда использую это и никогда раньше не подводил)

Я обнаружил кое-что странное, используя показать полный список процессов: там так много потоков копирования, как:

REPLACE INTO `db`.`_some_table_new` ...

работает длительное время (десятки и сотни секунд) и находится в состоянии «обновление».

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

Я искал документы на percona.com и не могу найти никакой информации о опции многопоточного копирования.

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

Может ли кто-нибудь помочь мне, спасибо!


person Ke Lu    schedule 18.08.2017    source источник


Ответы (1)


Операторы REPLACE запускаются триггерами, созданными pt-online-schema-change.

pt-online-schema-change запускает только один поток. Но триггеры могут выполняться многими другими клиентскими потоками, выполняющими INSERT/UPDATE/DELETE в исходной таблице.

pt-online-schema-change — это не волшебный способ изменить таблицу бесплатно. Это имеет свою стоимость. Каждое обновление этой таблицы становится двумя обновлениями.

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

Вы можете перейти на более мощный сервер. Может помочь большее количество ядер ЦП и более быстрая система ввода-вывода. Но это будет очень дорого.

Более простое решение — запланировать изменения таблицы на более позднее время, когда у вас меньше трафика.

person Bill Karwin    schedule 18.08.2017
comment
Спасибо! Я думаю, это триггеры. Меня удивляет, что даже я запускаю pt-online-schema-change в полночь, он может легко увеличить число запущенных потоков до нескольких сотен. Наконец, я запускаю команду alter непосредственно в клиенте MySQL для каждого экземпляра master/slave, это довольно быстро и занимает около 50 секунд, без ускорения запущенных потоков (запущенных потоков менее 6) - person Ke Lu; 19.08.2017
comment
Могут быть риски при запуске pt-online-schema-change, когда у вас большая нагрузка на таблицу. В этом случае лучше использовать встроенный онлайн-DDL. - person Ke Lu; 19.08.2017