[Документация Yandex Cloud](../../index.md) > [Yandex MPP Analytics for PostgreSQL](../index.md) > [Концепции](overview.md) > Расширение кластера

# Расширение кластера Yandex MPP Analytics for PostgreSQL

Кластер можно [расширить](../operations/cluster-expand.md), чтобы добавить в него дополнительные хосты-сегменты.

Процедура расширения состоит из [этапа подготовки](#preparation) и [этапа перераспределения данных](#redistribution). Этап перераспределения данных можно выполнить как сразу после этапа подготовки, так и позднее в [фоновом режиме](#setting-delay-redistribution).

Выполнение каждого из этапов [может занять длительное время](#duration). Нельзя повлиять на длительность этапа подготовки, но можно повлиять на длительность этапа перераспределения данных, таким образом контролируя общую длительность процедуры расширения кластера.

## Этап подготовки {#preparation}

На этом этапе происходят следующие процессы:

1. В кластер добавляются новые хосты-сегменты.
1. Утилита [gpexpand](https://techdocs.broadcom.com/us/en/vmware-tanzu/data-solutions/tanzu-greenplum/7/greenplum-database/utility_guide-ref-gpexpand.html) производит подготовку к перераспределению таблиц:

    1. Создает служебную схему данных `gpexpand` в базе данных `postgres`.

    1. Формирует очередь таблиц для перераспределения.

        Будут перераспределены все таблицы из всех баз данных кластера, но им будет назначен разный приоритет, который влияет на положение таблицы в очереди.

        [Приоритетом можно управлять](../operations/cluster-expand.md#table-priority), если перераспределение данных для конкретной таблицы [еще не началось](../operations/cluster-expand.md#redistribute-monitoring) и кластер не [закрыт от нагрузки](#setting-close-cluster).

    1. Подготавливает [партиционированные таблицы](https://techdocs.broadcom.com/us/en/vmware-tanzu/data-solutions/tanzu-greenplum/7/greenplum-database/admin_guide-ddl-ddl-partition.html#about-the-table-partitioning-methods) к перераспределению данных.

Ориентировочная длительность этапа — несколько часов, повлиять на нее нельзя. Подробнее о длительности этапов — [ниже](#duration).

{% note warning %}

Фактически новые хосты-сегменты будут добавлены в кластер уже на этом этапе, но расширение кластера считается выполненным только после завершения этапа перераспределения данных.

{% endnote %}

## Этап перераспределения данных {#redistribution}

На этом этапе происходят следующие процессы:

1. Данные таблиц в кластере перераспределяются с помощью утилиты [gpexpand](https://techdocs.broadcom.com/us/en/vmware-tanzu/data-solutions/tanzu-greenplum/7/greenplum-database/utility_guide-ref-gpexpand.html) таким образом, чтобы эти данные были равномерно распределены по всем хостам-сегментам.

1. Служебная схема данных `gpexpand` удаляется.

Ориентировочная длительность этапа — несколько дней, на нее можно повлиять с помощью [настроек](#settings). Подробнее о длительности этапов — [ниже](#duration).

## Длительность этапов и контроль за длительностью {#duration}

Ориентировочная длительность каждого этапа составляет:

* Несколько часов для [этапа подготовки](#preparation).
* Несколько дней для [этапа перераспределения данных](#redistribution).

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

Это связано с тем, что на каждом этапе расширения кластера работает утилита [gpexpand](https://techdocs.broadcom.com/us/en/vmware-tanzu/data-solutions/tanzu-greenplum/7/greenplum-database/utility_guide-ref-gpexpand.html), которая в ходе своей работы захватывает эксклюзивные [блокировки](https://techdocs.broadcom.com/us/en/vmware-tanzu/data-solutions/tanzu-greenplum/7/greenplum-database/ref_guide-sql_commands-LOCK.html) на уровне отдельных таблиц. Пользовательские запросы в процессе выполнения тоже могут захватывать блокировки. Поэтому может существенно замедляться как работа `gpexpand`, так и обработка пользовательских запросов: это зависит от того, какой процесс первым захватил блокировку, а какой — ожидает особождения этой блокировки. Оба этих процесса могут создавать повышенную нагрузку на кластер.

Этап подготовки сократить нельзя, но можно повлиять на длительность этапа перераспределения данных. Для этого перед запуском процедуры [укажите](../operations/cluster-expand.md) необходимые [настройки](#settings), которые определяют поведение кластера на этом этапе. Комбинируя настройки, можно найти нужный баланс между скоростью перераспределения данных и скоростью обработки пользовательских запросов.

Поскольку этап перераспределения данных может длиться достаточно долго, для кластеров Yandex MPP Analytics for PostgreSQL предоставляются [инструменты для мониторинга](../operations/cluster-expand.md#redistribute-monitoring) процесса перераспределения данных. Используйте эти инструменты, когда запущено расширение кластера, чтобы получить более точную информацию о ходе процесса и оценить время до его завершения.

## Настройки, влияющие на процесс перераспределения данных {#settings}

Доступны следующие настройки:

* **Закрыть кластер от нагрузки**{#setting-close-cluster} <code><b><small>Консоль управления</small></b></code> <code><b><small>CLI</small></b></code> <code><b><small>API</small></b></code>

    Если настройка включена (`true`), то к кластеру нельзя подключиться и в него не поступают новые пользовательские запросы. В результате расширение кластера будет выполняться быстрее, потому что не нужно ожидать освобождения блокировок, которые бы захватывались при выполнении поступающих пользовательских запросов.

    {% note warning %}
    
    Если вы закроете кластер от нагрузки и при этом выключите [фоновое перераспределение данных](expand.md#setting-delay-redistribution), то потеряете доступ к кластеру до завершения расширения кластера.
    
    Процесс расширения может выполняться [длительное время](expand.md#duration).
    
    {% endnote %}

* **Фоновое перераспределение данных**{#setting-delay-redistribution} <code><b><small>Консоль управления</small></b></code> <code><b><small>CLI</small></b></code> <code><b><small>API</small></b></code>

    Эта настройка влияет на стратегию перераспределения данных:

    * Если настройка выключена (`false`), то данные будут перераспределены сразу же после завершения этапа подготовки к расширению кластера.

        Кластер будет находиться в статусе `Updating` до тех пор, пока не завершатся все этапы расширения кластера.

        Процесс перераспределения данных будет запущен однократно и продлится либо до завершения перераспределения всех таблиц в кластере, либо [до истечения соответствующего таймаута](#setting-duration).

        Если процесс перераспределения данных завершится по таймауту и часть таблиц останется не обработанной, то такие таблицы потребуется [перераспределить вручную](../operations/cluster-expand.md#start-redistribute).

    * Если настройка включена (`true`), то перераспределение данных будет отложено.

        Кластер будет находиться в статусе `Updating` только на этапе подготовки к расширению кластера.

        Процесс перераспределения данных будет запускаться по расписанию во время выполнения [регламентных операций](maintenance.md#regular-ops) до тех пор, пока не будут обработаны все таблицы.

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

        1. Выполняется [очистка пользовательских таблиц](maintenance.md#custom-table-vacuum) (`VACUUM`).

        1. Выполняется перераспределение данных (`REDISTRIBUTE`):

            1. Если до [истечения таймаута](#setting-duration) были обработаны все таблицы, то процесс перераспределения данных будет удален из расписания регламентных работ и больше не будет запускаться.
            1. Если до истечения таймаута была обработана только часть таблиц, то процесс запустится повторно при следующем проведении регламентных операций и обработка таблиц будет продолжена.

        1. Выполняется [сбор статистики](maintenance.md#get-statistics) (`ANALYZE`).

* **Таймаут редистрибуции**{#setting-duration} <code><b><small>Консоль управления</small></b></code> <code><b><small>CLI</small></b></code> <code><b><small>API</small></b></code>

    Таймаут (в секундах), после истечения которого процесс перераспределения данных будет прерван.

    Истечение таймаута не приводит к немедленному прерыванию процесса: будет завершено перераспределение данных для тех таблиц, которые находятся в обработке (статус `IN PROGRESS`). Можно [запросить статус таблиц](../operations/cluster-expand.md#redistribute-monitoring), если кластер не закрыт от нагрузки.
    
    Минимальное значение — `0`. Таймаут будет рассчитан автоматически в зависимости от конфигурации кластера и объема данных.
    
    Максимальное значение зависит от того, включено ли фоновое перераспределение данных:
    
    * `28800` (8 часов) — если включено.
    * Не ограничено — если выключено.

* **Количество потоков редистрибуции**{#setting-parallel} <code><b><small>Консоль управления</small></b></code> <code><b><small>CLI</small></b></code> <code><b><small>API</small></b></code>

    Количество потоков, которые будут запущены в ходе процесса перераспределения данных.

    Большее количество потоков ускорит перераспределение данных, но увеличит нагрузку на кластер.
    
    Минимальное значение (по умолчанию) — `0` (количество будет рассчитано автоматически в зависимости от конфигурации кластера и объема данных), максимальное — `25`.