Расширение кластера
Вы можете добавить хосты-сегменты в кластер Managed Service for Greenplum®. Данные перераспределяются между существующими и добавленными сегментами. Количество добавляемых хостов не может быть меньше двух.
Для расширения кластера используется утилита gp_expand
. Подробнее об утилите и ее режиме работы см. в документации Greenplum®.
Перераспределение данных бывает двух типов:
- Автоматическое — после обновления кластера выполняется перенос части данных в новые сегменты последовательно для каждой таблицы в течение таймаута, указанного в параметрах расширения. Во время переноса таблица недоступна для операций чтения и записи. После завершения таймаута перераспределение данных прекращается.
- Ручное — выполняется пользователем самостоятельно после добавления новых сегментов. Для этого укажите таймаут
0
в параметрах расширения.
Добавить хосты-сегменты
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --folder-name
или --folder-id
.
Чтобы добавить хосты-сегменты в кластер Greenplum®:
-
Посмотрите описание команды CLI для расширения кластера:
yc managed-greenplum cluster expand --help
-
Укажите параметры хостов-сегментов кластера в команде расширения кластера:
yc managed-greenplum cluster expand <имя кластера> \ --segment-host-count <количество добавляемых хостов-сегментов> \ --add-segments-per-host-count <количество добавляемых сегментов на хост> \ --duration-seconds <таймаут перераспределения данных в секундах>
Значение по умолчанию для параметра
--duration-seconds
–7200
(2 часа).
Воспользуйтесь методом API expand и передайте в запросе:
- Идентификатор кластера в параметре
clusterId
. - Количество добавляемых хостов-сегментов в параметре
segmentHostCount
. - Количество добавляемых сегментов на хост в параметре
addSegmentsPerHostCount
. - Таймаут перераспределения данных (в секундах) в параметре
duration
. Минимальное значение и значение по умолчанию —0
(не выполнять перераспределение).
Идентификатор кластера можно получить со списком кластеров в каталоге.
Важно
Минимальное (0
) или малое (меньше 2 часов) значение таймаута перераспределения может снизить производительность кластера. В этом случае повторно запустите перераспределение вручную (см. Пример).
Мониторинг перераспределения данных
Чтобы следить за ходом перераспределения данных по новым сегментам, подключитесь к базе postgres
и выполните запрос от имени пользователя с ролью mdb_admin
:
SELECT dbname, fq_name, status, expansion_started, source_bytes FROM gpexpand.status_detail;
dbname | fq_name | status | expansion_started | source_bytes
-----------+-------------------------------------+-------------+----------------------------+-------------
diskquota | diskquota_namespace.database_list | NOT STARTED | | 0
postgres | public.rnd_nocomp_distrnd_ao_res3 | NOT STARTED | | 52558742480
postgres | public.rnd_nocomp_distrnd_ao1 | COMPLETED | 2022-09-06 12:44:36.71759 | 13013536
postgres | public.rnd_nocomp_distrnd_ao_res2 | IN PROGRESS | 2022-09-06 13:03:29.231359 | 63070490912
(4 rows)
Текущий статус перераспределения будет указан в колонке status
.
Найти таблицы, которые перераспределились не полностью, можно с помощью запроса:
SELECT * FROM gp_toolkit.gp_skew_coefficients ORDER BY skccoeff DESC;
Пример ручного перераспределения данных
Если при расширении кластера Greenplum® указан таймаут 0
или мониторинг показывает, что не все данные перераспределены по новым сегментам, то необходимо выполнить перераспределение вручную:
-
Для обычных таблиц выполните запрос:
ALTER TABLE ONLY <имя_таблицы> EXPAND TABLE;
-
Для партиционированных таблиц выполните запрос:
ALTER TABLE <имя_таблицы> SET WITH (REORGANIZE=true) <distribution_policy>;
где
<distribution_policy>
– это строка, обозначающая политику распределения Greenplum® для партиции выбранной таблицы. Ее можно получить в результате вызова встроенной функции Greenplum®:SELECT pg_get_table_distributedby(<OID партиции>) AS distribution_policy;
Greenplum® и Greenplum Database® являются зарегистрированными товарными знаками или товарными знаками VMware, Inc в США и/или других странах.