[Документация Yandex Cloud](../../index.md) > [Yandex Data Transfer](../index.md) > [Концепции](index.md) > Параллельное копирование

# Параллельное копирование

Сервис Data Transfer может одновременно задействовать для трансфера несколько потоков исполнения. Это существенно увеличивает пропускную способность трансфера и позволяет использовать для него больший объем ресурсов. Параллельное копирование применяется для [всех видов копирования](transfer-lifecycle.md#copy) в трансферах типа _**Копирование**_ и _**Копирование и репликация**_, находящихся в [статусе](transfer-lifecycle.md#statuses) **Копируется**.

Чтобы включить параллельное копирование, укажите его [настройки](#settings). Настройки параллельного копирования рекомендуется подбирать для каждого трансфера отдельно.

## Источники, которые поддерживают параллельное копирование одной таблицы {#source-databases}

Возможности масштабирования зависят от типа базы-источника:

* Источники [PostgreSQL](../operations/endpoint/source/postgresql.md), [MongoDB](../operations/endpoint/source/mongodb.md) и [Greenplum®](../operations/endpoint/source/greenplum.md) поддерживают разделение таблиц на части и параллельное копирование данных из одной таблицы. Для этих источников необходим первичный ключ. При использовании ключа [типа `serial`](https://www.postgresql.org/docs/current/datatype-numeric.html#DATATYPE-SERIAL) части таблиц читаются по диапазонам. Другие типы ключей позволяют равномерно распределять таблицы в соответствии со специальным алгоритмом.

  {% cut "Алгоритм расчета" %}

  Если первичный ключ не является `serial`, то от значения первичного ключа высчитывается числовое хеш-значение. Это значение делится на количество частей, на которые будет разбита таблица для параллельного копирования. По значению остатка от этого деления определяется, в какую часть таблицы попадет строка с этим ключом.

  {% endcut %}

* Источник [OpenSearch](../operations/endpoint/source/opensearch.md) поддерживает параллельное копирование данных из одного индекса.
* Источники [ClickHouse®](../operations/endpoint/source/clickhouse.md) поддерживают параллельное копирование по партициям. Для этого таблица должна иметь несколько партиций. Таблица из одной партиции будет скопирована в один поток. Параллельное копирование доступно только для трансферов из ClickHouse® в ClickHouse®.
* Источник [Yandex Object Storage](../operations/endpoint/source/object-storage.md) поддерживает параллельное копирование данных из одного каталога.
* Источник [Managed Service for YDB](../operations/endpoint/source/ydb.md) поддерживает автоматическое партиционирование таблиц и параллельное копирование данных по партициям.

Прочие источники поддерживают параллельное копирование нескольких таблиц одновременно (без распараллеливания внутри одной таблицы).

## Особенности параллельного копирования Greenplum® {#special-gp}

Сервис подключается напрямую к сегментам кластера Greenplum® и переносит данные из выбранной таблицы параллельно из всех сегментов. Консистентность данных в каждом сегменте обеспечивается механизмом [Snapshot isolation](https://www.postgresql.org/docs/current/transaction-iso.html#XACT-REPEATABLE-READ).

## Настройки {#settings}

{% list tabs group=instructions %}

- Консоль управления {#console}


  **Настройки копирования** → **Настройки параллельного копирования**:

  * **Количество воркеров** — количество [воркеров](index.md#worker), которые будут параллельно запущены для копирования данных. Каждый воркер запускается на независимой виртуальной машине с собственными ресурсами CPU и RAM и собственным сетевым подключением.

  * **Количество потоков** — количество потоков, которое будет запущено в каждом воркере. Каждый поток запускается в отдельном контейнере на виртуальной машине воркера и копирует одну таблицу или ее часть (в зависимости от типа источника).

  Подробнее о настройке воркеров и потоков читайте в [рекомендациях](#recommendations).


{% endlist %}

## Рекомендации по параллельному копированию {#recommendations}

Убедитесь, что для вашего трансфера есть [настройки](#settings) параллельного копирования.

Параллельное копирование помогает ускорить перенос данных, только если скорость трансфера достаточная. Она зависит от следующих факторов:

* скорость чтения из базы-источника;
* скорость обработки данных сервисом Data Transfer;
* скорость вставки данных в базу-приемник.

Чтобы проверить скорость трансфера, посмотрите графики сервиса [Yandex Monitoring](../../monitoring/index.md). Скорость считается достаточной, если выполняются условия:

* На графиках кластера-источника и кластера-приемника потребление таких ресурсов, как CPU, RAM или объем диска, не приближается к предельным значениям.

* График трансфера «Target response time [s]» показывает, что 95% записей выполняются быстрее, чем за секунду.

    Для ClickHouse®-приемника скорость приема данных регулируется [настройкой эндпоинта-приемника](../operations/endpoint/target/clickhouse.md#additional-settings) **Интервал записи**. Значение может превышать 1 секунду. В таком случае график трансфера «Target response time [s]» должен показывать, что 95% записей выполняются быстрее, чем время, указанное в настройке **Интервал записи**.

При параллельном копировании вы выбираете количество воркеров и количество потоков в воркере. Чем выше будут значения, тем больше будут производительность трансфера, количество сетевых соединений и нагрузка трансфера на источник и приемник. Эти показатели увеличиваются пропорционально числу воркеров, умноженному на число потоков внутри воркера.

Чтобы добиться оптимальной производительности и нагрузки, проверьте работу трансфера при разных настройках параллельного копирования. В качестве начальных значений используйте 2 воркера и 4 потока внутри воркера. Они ускоряют копирование примерно в 8 раз. Дальше следите за трансфером и следуйте рекомендациям:

* Если скорость копирования недостаточная и у источника и приемника есть свободные ресурсы, увеличьте количество воркеров. Проверить скорость копирования можно на графике трансфера «Target response time [s]», наличие свободных ресурсов — на графиках потребления ресурсов в кластерах.

* Если наблюдается недопустимо высокая нагрузка на источник или приемник, то остановите копирование, уменьшите количество воркеров и запустите трансфер снова. Проверить нагрузку можно на графиках потребления ресурсов в кластерах.

* Если существенно увеличилось время записи в приемник, то остановите копирование, уменьшите количество воркеров и запустите трансфер снова. Проверить скорость записи можно на графике трансфера «Target response time [s]».

* Если появляется ошибка вида `Instance was restarted`, уменьшите количество потоков внутри воркера и запустите трансфер снова.

Если возникают сложности с настройкой, обратитесь в [техническую поддержку](https://kz.center.yandex.cloud/support).

_Greenplum® и Greenplum Database® являются зарегистрированными товарными знаками или товарными знаками Broadcom Inc в США и/или других странах._