> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-mintlify-8a08bda2.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

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

> Документация с объяснением параллельного снимка в ClickPipe для Postgres

export const Image = ({img, alt, size}) => {
  return <Frame>
      <img src={img} alt={alt} />
    </Frame>;
};

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

<div id="overview-pg-snapshot">
  ## Обзор
</div>

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

<div id="ctid-pg-snapshot">
  ### Столбец CTID в Postgres
</div>

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

<div id="logical-partitioning-pg-snapshot">
  ### Логическое партиционирование
</div>

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

Рассмотрим приведённые ниже настройки:

<Image img="https://mintcdn.com/private-7c7dfe99-mintlify-8a08bda2/KeiVE4MGTrCd9SX4/images/integrations/data-ingestion/clickpipes/postgres/snapshot_params.png?fit=max&auto=format&n=KeiVE4MGTrCd9SX4&q=85&s=800ec90d815723d2d31edc329fa6c958" alt="Параметры снимка" size="md" width="1192" height="532" data-path="images/integrations/data-ingestion/clickpipes/postgres/snapshot_params.png" />

<div id="numrows-pg-snapshot">
  #### Количество строк в снимке для партиции
</div>

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

<div id="parallelism-pg-snapshot">
  #### Параллелизм начальной загрузки
</div>

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

<div id="tables-parallel-pg-snapshot">
  #### Количество таблиц в снимке, обрабатываемых параллельно
</div>

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

<div id="monitoring-parallel-pg-snapshot">
  ### Мониторинг параллельного снимка в Postgres
</div>

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

<div id="limitations-parallel-pg-snapshot">
  ### Ограничения
</div>

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