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

# Расчет конфигурации кластера

В этом разделе приведены общие рекомендации для расчета конфигурации кластера при использовании Yandex MPP Analytics for PostgreSQL в качестве корпоративного [хранилища данных](https://ru.wikipedia.org/wiki/Хранилище_данных) небольших или средних размеров — до 100 ТБ несжатых данных.

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

Рекомендуется проводить нагрузочное тестирование продуктивного кластера перед вводом в эксплуатацию. При необходимости Yandex MPP Analytics for PostgreSQL позволяет [изменить конфигурацию кластера](../operations/cluster-config.md) с минимальным временем простоя.

## Конфигурация хостов-сегментов {#segment}

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

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

### Расчет размера хранилища {#storage}

При расчете хранилища кластера учитывайте следующие факторы:

* _Зеркалирование_. Увеличивает требуемый объем хранилища в два раза.
* _Сжатие_. Уменьшает требуемый объем хранилища. Степень сжатия может сильно варьироваться в зависимости от данных и выбранного алгоритма сжатия. Для расчета показатель сжатия принимается равным 3.
* _Запас свободного места_. Рекомендуемое заполнение хранилища при эксплуатации Yandex MPP Analytics for PostgreSQL — не более 70%. Свободное место необходимо оставлять для транзакционных логов, spill-файлов, системных файлов.

С учетом этих факторов суммарный размер хранилища для всех хостов-сегментов можно брать примерно равным объему данных без сжатия:

```text
Размер хранилища = <объем_данных_без_сжатия> × 2 ÷ 3 ÷ 0,7 = <объем_данных_без_сжатия> × 0,95
```

Объем данных, который предполагается хранить в холодном хранилище, используя модуль [Yezzey](../operations/extensions/yezzey.md), не следует учитывать при расчете размера хранилища Yandex MPP Analytics for PostgreSQL.

О типах дисков, которые используются для организации хранилища, читайте в разделе [Типы дисков](storage.md).

### Расчет количества хостов-сегментов и количества сегментов на хост {#number-segments}

Архитектура сервиса Yandex MPP Analytics for PostgreSQL реализует параллелизацию обработки данных. Единицей параллелизации является сегмент. Чем больше сегментов в кластере, тем больше ресурсов выделяется на один запрос.

На одном хосте-сегменте могут располагаться один или несколько сегментов. Количество сегментов в кластере задается при его создании и в дальнейшем может быть увеличено путем [расширения кластера](expand.md). Расширение кластера — длительная операция, которая требует перераспределения всех данных по сегментам. Количество сегментов не может быть уменьшено.

При расчете количества сегментов для кластера средних размеров в качестве базового значения можно принять количество терабайтов в объеме данных без сжатия:

```text
Общее количество сегментов = <объем_данных_без_сжатия_в_ТБ>
```

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

Для продуктивных систем рекомендуется делать общее количество сегментов не меньше 8.

При расчете количества хостов-сегментов должно выполняться соотношение:

```text
Общее количество сегментов = <количество_хостов-сегментов> × <количество_сегментов_на_хост>
```

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

### Расчет количества ядер vCPU и оперативной памяти {#vcpu-ram}

При расчете количества ядер CPU следует опираться на объем данных и планируемую конкурентность нагрузки.
Для умеренной нагрузки можно брать 3 vCPU на сегмент. Таким образом, суммарное количество vCPU на всех хостах-сегментах равно:

```text
Общее количество vCPU = <общее_количество_сегментов> × 3
```

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

Количество ядер на хосте-сегменте определяется из вычисленных выше параметров по формуле:

```text
Количество vCPU на хост-сегмент = <общее_количество_vCPU> / <количество_хостов-сегментов>
```

Выберите конфигурацию хоста-сегмента с наиболее близким к получившемуся количеством vCPU на хост-сегмент. Для продуктивных систем рекомендуется выбирать типы хостов `io-optimized`.

### Пример расчета конфигурации хостов-сегментов {#segment-example}

Для хранения и обработки 20 ТБ несжатых данных с умеренным уровнем нагрузки понадобится кластер со следующими характеристиками хостов-сегментов:

* Размер хранилища: 20 ТБ × 1 = 20 ТБ.
* Количество сегментов: 20 ТБ × 1 сегмент/ТБ = 20.
* Количество vCPU на сегментах: 20 сегментов × 3 vCPU/сегмент = 60.
* Количество хостов-сегментов: 60 vCPU ÷ 16 vCPU/хост = 4.

    {% note info %}

    Для продуктивных систем выбирайте тип хоста `io-optimized`, где минимальное количество ядер на хост — 16.

    {% endnote %}

* Размер хранилища на хост: 20 ТБ ÷ 4 хоста = 5 ТБ.
* Количество сегментов на хост: 20 сегментов ÷ 4 хоста = 5.

Подробнее о классах хостов читайте в разделе [Доступные классы хостов](instance-types.md#available-flavors).

## Конфигурация хостов-мастеров {#master}

Хосты-мастеры предназначены для обработки подключений и координации работы сегментов. Такие хосты не хранят и не обрабатывают данные, поэтому они менее требовательны к производительности.

Для хостов-мастеров в большинстве случаев достаточно хостов типа `standard`, с [типом диска](storage.md) `network-ssd` и объемом 100 ГБ.

Для высоконагруженных кластеров с большим количеством хостов-сегментов рекомендуется использовать для мастеров хосты типа `io-optimized`.