Перейти к основному содержанию
В этом документе объясняется, как в ClickPipe для Postgres выполняются параллельное создание снимка и начальная загрузка, а также описываются параметры снимка, с помощью которых можно управлять этим процессом.

Обзор

Начальная загрузка — это первая фаза CDC в ClickPipe, на которой ClickPipe переносит в ClickHouse исторические данные из таблиц исходной базы данных, а затем запускает CDC. Во многих случаях разработчики выполняют это в однопоточном режиме — например, с помощью pg_dump или pg_restore, либо используя один поток для чтения из исходной базы данных и записи в ClickHouse. Однако ClickPipe для Postgres может распараллелить этот процесс, что позволяет значительно ускорить начальную загрузку.

Столбец CTID в Postgres

В Postgres каждая строка таблицы имеет уникальный идентификатор — CTID. Это системный столбец, который по умолчанию не отображается, но его можно использовать для однозначной идентификации строк в таблице. CTID представляет собой комбинацию номера блока и смещения внутри него, что обеспечивает эффективный доступ к строкам.

Логическое партиционирование

ClickPipe для Postgres использует столбец CTID для логического партиционирования исходных таблиц. Сначала он выполняет COUNT(*) для исходной таблицы, а затем — запрос с оконной функцией, разбивающий данные на партиции, чтобы получить диапазоны CTID для каждой из них. Это позволяет ClickPipe читать исходную таблицу параллельно, при этом каждая партиция обрабатывается отдельным потоком. Рассмотрим приведённые ниже настройки:

Количество строк в снимке для партиции

Этот параметр определяет, сколько строк приходится на одну партицию. ClickPipe будет считывать исходную таблицу фрагментами такого размера; фрагменты обрабатываются параллельно в соответствии с заданным уровнем параллелизма начальной загрузки. Значение по умолчанию — 100 000 строк на партицию.

Параллелизм начальной загрузки

Этот параметр определяет, сколько партиций обрабатываются параллельно. Значение по умолчанию — 4, то есть ClickPipe будет одновременно читать 4 партиции исходной таблицы. Это значение можно увеличить, чтобы ускорить начальную загрузку, но рекомендуется оставлять его в разумных пределах с учетом характеристик исходного инстанса, чтобы не перегрузить исходную базу данных. ClickPipe автоматически скорректирует число партиций в зависимости от размера исходной таблицы и количества строк в каждой партиции.

Количество таблиц в снимке, обрабатываемых параллельно

Это не совсем относится к параллельному снимку, но этот параметр определяет, сколько таблиц обрабатывается параллельно во время начальной загрузки. Значение по умолчанию — 1. Обратите внимание, что это действует дополнительно к параллелизму партиций, поэтому, если у вас 4 партиции и 2 таблицы, ClickPipe будет читать 8 партиций параллельно.

Мониторинг параллельного снимка в Postgres

Вы можете проанализировать pg_stat_activity, чтобы увидеть, как работает параллельный снимок. ClickPipe создает несколько соединений с исходной базой данных, и каждое из них читает отдельную партицию исходной таблицы. Если вы видите запросы FETCH с разными диапазонами CTID, это означает, что ClickPipe читает исходные таблицы. Здесь также можно увидеть COUNT(*) и запрос для разбиения на партиции.

Ограничения

  • Параметры снимка нельзя изменить после создания пайпа. Если вы хотите их поменять, потребуется создать новый ClickPipe.
  • При добавлении таблиц в существующий ClickPipe изменить параметры снимка нельзя. Для новых таблиц ClickPipe будет использовать уже заданные параметры.
  • Столбец ключа партиционирования не должен содержать NULL, так как такие значения пропускаются логикой партиционирования.
Последнее изменение 10 июня 2026 г.