Параллельный снимок в MySQL ClickPipe
В этом документе объясняется, как работает параллельное выполнение snapshot/начальной загрузки в MySQL ClickPipe, а также рассматриваются параметры snapshot, которые можно использовать для управления этим процессом.
Обзор
Начальная загрузка — это первая фаза CDC (фиксация изменений данных) ClickPipe, на которой ClickPipe синхронизирует исторические данные таблиц из исходной базы данных в ClickHouse, а затем запускает CDC. Часто разработчики выполняют эту операцию в однопоточном режиме. Однако MySQL ClickPipe может распараллеливать этот процесс, что может существенно ускорить начальную загрузку.
Столбец ключа партиционирования
После включения соответствующего флага вы должны увидеть следующий параметр в окне выбора таблиц ClickPipe (как при создании, так и при редактировании ClickPipe):

MySQL ClickPipe использует столбец в исходной таблице для логического партиционирования исходных таблиц. Этот столбец называется столбец ключа партиционирования. Он используется для разбиения исходной таблицы на партиции, которые затем могут обрабатываться ClickPipe параллельно.
Столбец ключа партиционирования должен быть проиндексирован в исходной таблице, чтобы обеспечить заметный прирост производительности. Это можно проверить, выполнив SHOW INDEX FROM <table_name> в MySQL.
Логическое партиционирование
Рассмотрим следующие параметры:

Количество строк в snapshot на партицию
Этот параметр определяет, сколько строк составляют одну партицию. ClickPipe будет читать исходную таблицу блоками такого размера, и блоки обрабатываются параллельно в соответствии с заданным уровнем параллелизма начальной загрузки. Значение по умолчанию — 100 000 строк на партицию.
Параллелизм начальной загрузки
Этот параметр определяет, сколько партиций обрабатывается параллельно. Значение по умолчанию — 4, что означает, что ClickPipe будет читать 4 партиции исходной таблицы одновременно. Это значение можно увеличить, чтобы ускорить начальную загрузку, но рекомендуется подбирать его разумно, в зависимости от характеристик вашего исходного инстанса, чтобы не перегружать исходную базу данных. ClickPipe автоматически подстроит количество партиций в зависимости от размера исходной таблицы и количества строк на партицию.
Количество таблиц в snapshot, обрабатываемых параллельно
Этот параметр напрямую не связан с параллельным snapshot, но определяет, сколько таблиц обрабатывается параллельно во время начальной загрузки. Значение по умолчанию — 1. Обратите внимание, что это значение добавляется к параллелизму партиций, поэтому если у вас 4 партиции и 2 таблицы, ClickPipe будет читать 8 партиций параллельно.
Мониторинг параллельного snapshot в MySQL
Вы можете выполнить команду SHOW processlist в MySQL, чтобы увидеть работу параллельного snapshot. ClickPipe создаст несколько подключений к исходной базе данных, каждое из которых читает свою партицию исходной таблицы. Если вы видите запросы SELECT с разными диапазонами, это означает, что ClickPipe читает исходные таблицы. Здесь вы также можете увидеть запрос COUNT(*) и запрос партиционирования.
Ограничения
- Параметры snapshot нельзя изменить после создания ClickPipe. Если вы хотите их изменить, потребуется создать новый ClickPipe.
- При добавлении таблиц в уже существующий ClickPipe вы не можете менять параметры snapshot. ClickPipe будет использовать существующие параметры для новых таблиц.
- Столбец ключа партиционирования не должен содержать значений
NULL, поскольку они пропускаются логикой партиционирования.