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

# Расширение кластера

Вы можете расширить кластер Yandex MPP Analytics for PostgreSQL, добавив хосты-сегменты. Количество добавляемых хостов не может быть меньше двух. Вы также можете увеличить [количество сегментов на хост](../concepts/index.md).

Во время расширения кластера данные автоматически перераспределяются равномерно по всем хостам кластера (включая добавленные хосты). Подробнее читайте в разделе [Расширение кластера Yandex MPP Analytics for PostgreSQL](../concepts/expand.md).

## Расширить кластер {#add-hosts}

{% list tabs group=instructions %}

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

    1. Перейдите [на страницу каталога](https://kz.console.yandex.cloud).
    1. Перейдите в сервис **Yandex MPP Analytics for&nbsp;PostgreSQL**.
    1. Выберите кластер и откройте вкладку ![hosts-edit](../../_assets/console-icons/cube.svg) **Хосты**.
    1. Нажмите кнопку **Расширить кластер** в правом верхнем углу.
    1. Укажите настройки расширения кластера:

        * **Количество новых хостов-сегментов** — количество хостов-сегментов, на которое нужно расширить кластер.

            Минимальное значение (по умолчанию) — `2`, максимальное значение ограничено [лимитом на количество хостов-сегментов в кластере](../concepts/limits.md#limits) (за вычетом существующих хостов).

        * **Добавить сегментов на хост** — количество добавляемых сегментов на хост.

            {% note warning %}
            
            Сегменты [будут добавлены на все хосты](../concepts/index.md) — как новые, так и существующие.
            
            {% endnote %}
            
            Минимальное значение (по умолчанию) — `0` (количество сегментов на хост остается неизменным), максимальное — зависит от [класса хостов](../concepts/instance-types.md).

            Класс хостов-сегментов и количество сегментов на хост [влияют](../concepts/instance-types.md#select-class-segment-hosts) на максимальный объем памяти, выделенный на каждый серверный процесс Yandex MPP Analytics for PostgreSQL. Если выбран класс хостов с небольшим объемом оперативной памяти и указано большое число сегментов, то может возникнуть [ошибка](../qa/cluster-hosts.md#memory-limit).

        * **Закрыть кластер от нагрузки** — [закрыть ли кластер для доступа](../concepts/expand.md#setting-close-cluster).

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

        * **Фоновое перераспределение данных** — [использовать ли фоновое перераспределение данных](../concepts/expand.md#setting-delay-redistribution).

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

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

                {% note warning %}

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

                {% endnote %}

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

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

        * **Таймаут редистрибуции** — [таймаут (в секундах), после истечения которого процесс перераспределения данных будет прерван](../concepts/expand.md#setting-duration).

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

        * **Количество потоков редистрибуции** — [количество потоков, которые будут запущены в ходе процесса перераспределения данных](../concepts/expand.md#setting-parallel).

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

    1. Нажмите кнопку **Расширить**.

- CLI {#cli}

    Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), [установите и инициализируйте его](../../cli/quickstart.md#install).

    По умолчанию используется каталог, указанный при [создании](../../cli/operations/profile/profile-create.md) профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду `yc config set folder-id <идентификатор_каталога>`. Также для любой команды вы можете указать другой каталог с помощью параметров `--folder-name` или `--folder-id`. Если вы обращаетесь к ресурсу по имени, поиск будет выполнен в каталоге по умолчанию. Если вы обращаетесь к ресурсу по идентификатору, поиск будет выполнен глобально — во всех каталогах с учетом прав доступа.

    Чтобы расширить кластер:

    1. Посмотрите описание команды CLI для расширения кластера:

        ```bash
        yc managed-greenplum cluster expand --help
        ```

    1. Выполните команду, чтобы расширить кластер:

        ```bash
        yc managed-greenplum cluster expand <имя_или_идентификатор_кластера> \
           --segment-host-count <количество_добавляемых_хостов_сегментов> \
           --add-segments-per-host-count <количество_добавляемых_сегментов_на_хост> \
           --close-cluster <временный_запрет_на_подключение_к_кластеру> \
           --delay-redistribution <фоновое_перераспределение_данных> \
           --duration-seconds <таймаут_перераспределения_данных> \
           --parallel <количество_потоков_перераспределения_данных>
        ```

        Где:

        * `--segment-host-count` — количество хостов-сегментов, на которое нужно расширить кластер.

            Минимальное значение (по умолчанию) — `2`, максимальное значение ограничено [лимитом на количество хостов-сегментов в кластере](../concepts/limits.md#limits) (за вычетом существующих хостов).

        * `--add-segments-per-host-count` — количество добавляемых сегментов на хост.

            {% note warning %}
            
            Сегменты [будут добавлены на все хосты](../concepts/index.md) — как новые, так и существующие.
            
            {% endnote %}
            
            Минимальное значение (по умолчанию) — `0` (количество сегментов на хост остается неизменным), максимальное — зависит от [класса хостов](../concepts/instance-types.md).

            Класс хостов-сегментов и количество сегментов на хост [влияют](../concepts/instance-types.md#select-class-segment-hosts) на максимальный объем памяти, выделенный на каждый серверный процесс Yandex MPP Analytics for PostgreSQL. Если выбран класс хостов с небольшим объемом оперативной памяти и указано большое число сегментов, то может возникнуть [ошибка](../qa/cluster-hosts.md#memory-limit).

        * `--close-cluster` — [закрыть ли кластер для доступа](../concepts/expand.md#setting-close-cluster): `true` или `false`.

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

        * `--delay-redistribution` — [использовать ли фоновое перераспределение данных](../concepts/expand.md#setting-delay-redistribution): `true` или `false`.

            * Если фоновый режим выключен (`false`), то процесс перераспределения будет запущен однократно сразу после завершения подготовки к расширению кластера.
            
                Кластер будет находиться в статусе `Updating` до тех пор, пока не завершатся все этапы расширения кластера.
            
                {% note warning %}
            
                Если процесс перераспределения данных завершится по таймауту и часть таблиц останется не обработанной, то такие таблицы потребуется [перераспределить вручную](cluster-expand.md#start-redistribute).
            
                {% endnote %}
            
            * Если фоновый режим включен (`true`), то процесс перераспределения будет отложен. Процесс будет выполняться по заданному расписанию как [регламентная операция](../concepts/maintenance.md#regular-ops).
            
                Кластер будет находиться в статусе `Updating` только на этапе подготовки к расширению кластера.

        * `--duration-seconds` — [таймаут (в секундах), после истечения которого процесс перераспределения данных будет прерван](../concepts/expand.md#setting-duration).

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

        * `--parallel` — [количество потоков, которые будут запущены в ходе процесса перераспределения данных](../concepts/expand.md#setting-parallel).

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

        Идентификатор и имя кластера можно получить со [списком кластеров в каталоге](cluster-list.md#list-clusters).

- REST API {#api}

    1. [Получите IAM-токен для аутентификации в API](../api-ref/authentication.md) и поместите токен в переменную среды окружения:

        ```bash
        export IAM_TOKEN="<IAM-токен>"
        ```

    1. Воспользуйтесь методом [Cluster.Expand](../api-ref/Cluster/expand.md) и выполните запрос, например, с помощью [cURL](https://curl.se/):

        ```bash
        curl \
            --request POST \
            --header "Authorization: Bearer $IAM_TOKEN" \
            --header "Content-Type: application/json" \
            --url 'https://mdb.api.yandexcloud.kz/managed-greenplum/v1/clusters/<идентификатор_кластера>/expand' \
            --data '{
                      "segmentHostCount": "<количество_добавляемых_хостов-сегментов>",
                      "addSegmentsPerHostCount": "<количество_добавляемых_сегментов_на_хост>",
                      "duration": "<таймаут_перераспределения_данных>",
                      "parallel": "<количество_потоков_перераспределения_данных>",
                      "closeCluster": "<временный_запрет_на_подключение_к_кластеру>",
                      "delayRedistribution": "<фоновое_перераспределение_данных>"
                    }'
        ```

        Идентификатор кластера можно запросить со [списком кластеров в каталоге](cluster-list.md#list-clusters).

        Параметры тела запроса:

        * `segmentHostCount` — количество хостов-сегментов, на которое нужно расширить кластер.

            Минимальное значение (по умолчанию) — `2`, максимальное значение ограничено [лимитом на количество хостов-сегментов в кластере](../concepts/limits.md#limits) (за вычетом существующих хостов).

        * `addSegmentsPerHostCount` — количество добавляемых сегментов на хост.

            {% note warning %}
            
            Сегменты [будут добавлены на все хосты](../concepts/index.md) — как новые, так и существующие.
            
            {% endnote %}
            
            Минимальное значение (по умолчанию) — `0` (количество сегментов на хост остается неизменным), максимальное — зависит от [класса хостов](../concepts/instance-types.md).

            Класс хостов-сегментов и количество сегментов на хост [влияют](../concepts/instance-types.md#select-class-segment-hosts) на максимальный объем памяти, выделенный на каждый серверный процесс Yandex MPP Analytics for PostgreSQL. Если выбран класс хостов с небольшим объемом оперативной памяти и указано большое число сегментов, то может возникнуть [ошибка](../qa/cluster-hosts.md#memory-limit).

        * `duration` — [таймаут](../concepts/expand.md#setting-duration) в секундах, после истечения которого процесс перераспределения данных будет прерван.

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

        * `parallel` — [количество потоков](../concepts/expand.md#setting-parallel), которые будут запущены в ходе процесса перераспределения данных.

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

        * `closeCluster` — [закрыть кластер](../concepts/expand.md#setting-close-cluster) для доступа: `true` или `false`.

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

        * `delayRedistribution` — [использовать фоновое перераспределение данных](../concepts/expand.md#setting-delay-redistribution): `true` или `false`.

            * Если фоновый режим выключен (`false`), то процесс перераспределения будет запущен однократно сразу после завершения подготовки к расширению кластера.
            
                Кластер будет находиться в статусе `Updating` до тех пор, пока не завершатся все этапы расширения кластера.
            
                {% note warning %}
            
                Если процесс перераспределения данных завершится по таймауту и часть таблиц останется не обработанной, то такие таблицы потребуется [перераспределить вручную](cluster-expand.md#start-redistribute).
            
                {% endnote %}
            
            * Если фоновый режим включен (`true`), то процесс перераспределения будет отложен. Процесс будет выполняться по заданному расписанию как [регламентная операция](../concepts/maintenance.md#regular-ops).
            
                Кластер будет находиться в статусе `Updating` только на этапе подготовки к расширению кластера.

    1. Убедитесь, что запрос был выполнен успешно, изучив [ответ сервера](../api-ref/Cluster/expand.md#yandex.cloud.operation.Operation).

- gRPC API {#grpc-api}

    1. [Получите IAM-токен для аутентификации в API](../api-ref/authentication.md) и поместите токен в переменную среды окружения:

        ```bash
        export IAM_TOKEN="<IAM-токен>"
        ```

    1. Клонируйте репозиторий [cloudapi](https://github.com/yandex-cloud/cloudapi):
       
       ```bash
       cd ~/ && git clone --depth=1 https://github.com/yandex-cloud/cloudapi
       ```
       
       Далее предполагается, что содержимое репозитория находится в директории `~/cloudapi/`.

    1. Воспользуйтесь вызовом [ClusterService.Expand](../api-ref/grpc/Cluster/expand.md) и выполните запрос, например, с помощью [gRPCurl](https://github.com/fullstorydev/grpcurl):

        ```bash
        grpcurl \
            -format json \
            -import-path ~/cloudapi/ \
            -import-path ~/cloudapi/third_party/googleapis/ \
            -proto ~/cloudapi/yandex/cloud/mdb/greenplum/v1/cluster_service.proto \
            -rpc-header "Authorization: Bearer $IAM_TOKEN" \
            -d '{
                  "cluster_id": "<идентификатор_кластера>",
                  "segment_host_count": "<количество_добавляемых_хостов-сегментов>",
                  "add_segments_per_host_count": "<количество_добавляемых_сегментов_на_хост>",
                  "duration": "<таймаут_перераспределения_данных>",
                  "parallel": "<количество_потоков_перераспределения_данных>",
                  "close_cluster": "<временный_запрет_на_подключение_к_кластеру>",
                  "delay_redistribution": "<фоновое_перераспределение_данных>"
                }' \
            mdb.api.yandexcloud.kz:443 \
            yandex.cloud.mdb.greenplum.v1.ClusterService.Expand
        ```

        Идентификатор кластера можно запросить со [списком кластеров в каталоге](cluster-list.md#list-clusters).

        Параметры тела запроса:

        * `segment_host_count` — количество хостов-сегментов, на которое нужно расширить кластер.

            Минимальное значение (по умолчанию) — `2`, максимальное значение ограничено [лимитом на количество хостов-сегментов в кластере](../concepts/limits.md#limits) (за вычетом существующих хостов).

        * `add_segments_per_host_count` — количество добавляемых сегментов на хост.

            {% note warning %}
            
            Сегменты [будут добавлены на все хосты](../concepts/index.md) — как новые, так и существующие.
            
            {% endnote %}
            
            Минимальное значение (по умолчанию) — `0` (количество сегментов на хост остается неизменным), максимальное — зависит от [класса хостов](../concepts/instance-types.md).

            Класс хостов-сегментов и количество сегментов на хост [влияют](../concepts/instance-types.md#select-class-segment-hosts) на максимальный объем памяти, выделенный на каждый серверный процесс Yandex MPP Analytics for PostgreSQL. Если выбран класс хостов с небольшим объемом оперативной памяти и указано большое число сегментов, то может возникнуть [ошибка](../qa/cluster-hosts.md#memory-limit).

        * `duration` — [таймаут](../concepts/expand.md#setting-duration) в секундах, после истечения которого процесс перераспределения данных будет прерван.

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

        * `parallel` — [количество потоков](../concepts/expand.md#setting-parallel), которые будут запущены в ходе процесса перераспределения данных.

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

        * `close_cluster` — [закрыть кластер](../concepts/expand.md#setting-close-cluster) для доступа: `true` или `false`.

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

        * `delay_redistribution` — [использовать фоновое перераспределение данных](../concepts/expand.md#setting-delay-redistribution): `true` или `false`.

            * Если фоновый режим выключен (`false`), то процесс перераспределения будет запущен однократно сразу после завершения подготовки к расширению кластера.
            
                Кластер будет находиться в статусе `Updating` до тех пор, пока не завершатся все этапы расширения кластера.
            
                {% note warning %}
            
                Если процесс перераспределения данных завершится по таймауту и часть таблиц останется не обработанной, то такие таблицы потребуется [перераспределить вручную](cluster-expand.md#start-redistribute).
            
                {% endnote %}
            
            * Если фоновый режим включен (`true`), то процесс перераспределения будет отложен. Процесс будет выполняться по заданному расписанию как [регламентная операция](../concepts/maintenance.md#regular-ops).
            
                Кластер будет находиться в статусе `Updating` только на этапе подготовки к расширению кластера.

    1. Убедитесь, что запрос был выполнен успешно, изучив [ответ сервера](../api-ref/Cluster/expand.md#yandex.cloud.operation.Operation).

{% endlist %}

## Мониторинг перераспределения данных {#redistribute-monitoring}

Доступно несколько способов мониторинга [процесса перераспределения данных](../concepts/expand.md#redistribution):

* Если кластер [закрыт от нагрузки](../concepts/expand.md#setting-close-cluster) и [фоновое перераспределение данных](../concepts/expand.md#setting-delay-redistribution) выключено, то отслеживать ход процесса можно только с помощью инструментов мониторинга Yandex Cloud.

    [Наблюдайте за графиком](monitoring.md#monitoring-cluster) **Expansion progress** на вкладке **Мониторинг** страницы управления кластером или запрашивайте значения [метрик](../metrics.md#managed-greenplum-expand-metrics) `gp_expand.*` с помощью сервиса [Yandex Monitoring](../../monitoring/concepts/index.md).

* Если кластер не закрыт от нагрузки, то также можно выполнять SQL-запросы к объектам служебной схемы данных `gpexpand`.

    {% note info %}
    
    Эта схема доступна только в ходе расширения кластера, потом она удаляется.
    
    {% endnote %}

    Чтобы отслеживать ход процесса перераспределения данных с помощью SQL-запросов:

    1. [Подключитесь к базе данных](connect/index.md) `postgres` от имени пользователя с [ролью](../concepts/cluster-users.md#mdb_admin) `mdb_admin`.
    1. Выполните запрос, чтобы получить текущий статус процесса:

        ```sql
        SELECT dbname, fq_name, rank, status, expansion_started, expansion_finished
        FROM gpexpand.status_detail
        ORDER BY rank;
        ```

    Результат запроса будет содержать [различную информацию](https://techdocs.broadcom.com/us/en/vmware-tanzu/data-solutions/tanzu-greenplum/7/greenplum-database/ref_guide-system_catalogs-gp_expansion_tables.html) о ходе процесса перераспределения данных. В столбце `status` будет указан текущий статус обработки конкретных таблиц:

    * `NOT STARTED` — запланировано перераспределение данных таблицы, таблица находится в очереди на перераспределение.

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

    * `IN PROGRESS` — происходит перераспределение данных таблицы.
    * `COMPLETED` — перераспределение данных таблицы завершено.
    * `NO LONGER EXISTS` — таблица больше не существует.

## Дополнительные действия {#additional-actions}

### Изменить приоритет перераспределения таблиц {#table-priority}

На этапе [подготовки к расширению кластера](../concepts/expand.md#preparation) каждой таблице назначается ранг, влияющий на ее приоритет в очереди на перераспределение. Чем выше ранг таблицы, тем выше ее приоритет в очереди и тем быстрее будет выполнено перераспределение данных таблицы.

При необходимости можно изменить ранг одной или нескольких таблиц, если кластер [не закрыт от нагрузки](../concepts/expand.md#setting-close-cluster). Для этого нужно изменить таблицу в служебной схеме данных `gpexpand`.

{% note info %}

Эта схема доступна только в ходе расширения кластера, потом она удаляется.

{% endnote %}

Чтобы изменить ранг перераспределяемых таблиц:

1. [Подключитесь к базе данных](connect/index.md) `postgres` от имени пользователя с [ролью](../concepts/cluster-users.md#mdb_admin) `mdb_admin`.

1. Выполните запрос, чтобы получить текущий статус процесса перераспределения данных:

    ```sql
    SELECT dbname, fq_name, rank, status, expansion_started, expansion_finished
    FROM gpexpand.status_detail
    ORDER BY rank;
    ```

    В том числе будут выведены полные имена таблиц (`fq_name`) и их ранги (`rank`).

1. Измените ранг для одной или нескольких таблиц:

    ```sql
    UPDATE gpexpand.status_detail
    SET rank=<нужный_ранг>
    WHERE fq_name IN (<список_полных_имен_таблиц>);
    ```

    Подробнее читайте в [документации Greenplum®](https://techdocs.broadcom.com/us/en/vmware-tanzu/data-solutions/tanzu-greenplum/7/greenplum-database/admin_guide-expand-expand-redistribute.html#ranking-tables-for-redistribution).

### Запустить перераспределение данных вручную {#start-redistribute}

Если при расширении кластера не использовалось [фоновое перераспределение данных](../concepts/expand.md#setting-delay-redistribution) и был установлен недостаточно большой [таймаут для процесса перераспределения данных](../concepts/expand.md#setting-duration), то этот процесс может завершиться раньше, чем будут перераспределены данные всех таблиц.

При этом часть данных останется распределенной неравномерно. Как следствие, в [логах кластера](cluster-logs.md) будет возникать ошибка `Unknown error: Partially Distributed Data`. Чтобы устранить ошибку, вручную запустите перераспределение данных:

1. Узнайте общее количество сегментов в кластере:

    1. [Получите детальную информацию о кластере](cluster-list.md#get-cluster).
    1. Умножьте количество сегментов на хост на количество хостов-сегментов.

1. [Подключитесь к нужной базе данных](connect/index.md) от имени пользователя с [ролью](../concepts/cluster-users.md#mdb_admin) `mdb_admin`.

1. Найдите таблицы, данные которых распределены неравномерно:

    ```sql
    SELECT *
        FROM
            (SELECT oid, relname FROM pg_class) pgc
            JOIN
            (SELECT localoid AS oid, numsegments FROM gp_distribution_policy) gpdp
            USING (oid)
        WHERE numsegments != <общее_количество_сегментов>;
    ```

    Будет выведен список таблиц, в котором для каждой таблицы указаны:
    * `oid` — идентификатор таблицы;
    * `relname` — имя таблицы;
    * `numsegment` — количество сегментов, по которым размещены данные.

    Подробнее читайте в документации Greenplum®, посвященной таблице [gp_distribution_policy](https://techdocs.broadcom.com/us/en/vmware-tanzu/data-solutions/tanzu-greenplum/7/greenplum-database/ref_guide-system_catalogs-gp_distribution_policy.html).

1. Запустите перераспределение данных, пользуясь информацией, полученной ранее.

    Чтобы перераспределить данные отдельной таблицы, выполните запрос:

    * Для обычной таблицы:

        ```sql
        ALTER TABLE ONLY <имя_таблицы> EXPAND TABLE;
        ```

    * Для [партиционированной](https://techdocs.broadcom.com/us/en/vmware-tanzu/data-solutions/tanzu-greenplum/7/greenplum-database/admin_guide-ddl-ddl-partition.html#about-table-partitioning) таблицы:

        ```sql
        ALTER TABLE <имя_таблицы>
        SET WITH (REORGANIZE=true) <политика_распределения>;
        ```

        Чтобы узнать значение политики распределения для отдельной партиции таблицы, выполните запрос:

        ```sql
        SELECT pg_get_table_distributedby(<OID_партиции>) AS distribution_policy;
        ```

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