Перейти к основному содержимому
Перейти к основному содержимому

Параллельный снимок в Postgres ClickPipe

Этот документ объясняет, как работает параллелизованный снимок/начальная загрузка в Postgres ClickPipe и обсуждает параметры снимка, которые можно использовать для его настройки.

Обзор

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

Столбец CTID в Postgres

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

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

Postgres ClickPipe использует столбец 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, так как они пропускаются логикой партиционирования.