2.4. Планирование ресурсов #

При развёртывании Postgres Pro AXE необходимо выделить достаточное количество вычислительных ресурсов для выполнения аналитических запросов. Количество требуемых ресурсов зависит от следующих параметров хранилища:

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

После развёртывания Postgres Pro AXE выполняйте мониторинг доступных вычислительных ресурсов и будьте готовы при необходимости выделить дополнительные ресурсы за пределами этих рекомендаций.

2.4.1. Общий объём OLAP-данных в хранилище #

Для аналитических таблиц необходимо выделить достаточное количество свободного места в локальном, сетевом или S3-хранилище. Как правило, Parquet-файлы хранятся в сжатом формате, например Snappy или zstd, и составляют около 20% от первичных неструктурированных текстовых данных или данных таблиц Postgres Pro.

Хранилище должно иметь достаточную пропускную способность для поддержки всех аналитических запросов на чтение и запись при пиковых нагрузках.

2.4.2. Объём данных, обрабатываемых стандартным аналитическим запросом #

Для эффективного выполнения некоторых аналитических запросов требуется большой объём оперативной памяти, в частности, для следующих запросов:

  • объединение двух больших аналитических таблиц;

  • агрегирование большого количество уникальных ключей;

  • сортировка больших аналитических таблиц.

Объём оперативной памяти, необходимый для конкретной OLAP-нагрузки, зависит от количества и размера аналитических запросов в экземпляре Postgres Pro AXE. Выполняйте мониторинг доступной оперативной памяти и при необходимости выделяйте дополнительную оперативную память.

Для изначального развёртывания выделите 4 ядра ЦП на каждого аналитика, а также около 6 ГБ оперативной памяти на каждое ядро ЦП, зарезервированное для выполнения аналитических запросов.

Каждые 24 часа выполняйте мониторинг количества временных файлов, создаваемых pgpro_axe, и избегайте пиковых значений. Временные файлы располагаются в каталоге, указанном параметром конфигурации duckdb.temporary_directory.

Если pgpro_duckdb не хватает оперативной памяти для выполнения аналитического запроса, связанные с ним OLAP-данные помещаются во временные файлы, что значительно увеличивает время выполнения такого запроса. Чтобы максимально увеличить общую пропускную способность кластера Postgres Pro AXE и количество аналитических запросов, выполняемых за единицу времени, обрабатывайте большую часть аналитических запросов в оперативной памяти.

Однако временные файлы можно использовать при обработке ресурсоёмких аналитических запросов с большим временем выполнения (например, несколько часов).

2.4.3. Требуемое время выполнения аналитических запросов #

Некоторые аналитические запросы должны быть выполнены в течение ограниченного периода времени. В частности, это относится к интерактивным запросам, а также к запросам, результаты которых должны быть доступны к определённой дате и времени, например к началу рабочего дня. Если для выполнения аналитических запросов выделено достаточно оперативной памяти и для них не создаются временные файлы, время выполнения определяется количеством ядер ЦП, которые зарезервированы для выполнения аналитических запросов.

Для определения необходимого количества ядер ЦП используйте внутренние тесты производительности. В рамках таких тестов чувствительные ко времени аналитические запросы выполняются к тестовым данным. Размер и структура тестовых данных имитируют реальные данные, которые будут использованы.

2.4.4. Количество аналитических запросов, выполненных за единицу времени #

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

Выполнение некоторых ETL-операций можно запланировать на конкретное время дня, в то время как для других задач, таких как выполнение незапланированных (ad hoc) аналитических запросов, это сделать невозможно.

Избегайте пиковых OLAP-нагрузок за счёт равномерного распределения выполнения аналитических запросов в течение дня, оставляя при этом запас в 30% для непредвиденных задач.

pgpro_axe обрабатывает аналитические запросы линейно, пока ему хватает ресурсов ввода-вывода, оперативной памяти, а также ЦП. При истощении этих ресурсов производительность падает.

Рекомендации по избежанию истощения ресурсов:

  • устраните узкие места в кластере Postgres Pro;

  • снизьте пиковые OLAP-нагрузки;

  • оптимизируйте выполнение аналитических запросов;

  • перенесите ETL-операции и незапланированные аналитические запросы на выделенный сервер Postgres Pro AXE, например на асинхронную резервную реплику.

2.4.5. Особенности и ограничения #

Postgres Pro AXE имеет следующие ограничения, которые необходимо учитывать при выполнении OLAP-операций:

  • pgpro_axe выполняет SQL-запросы на одном сервере и ограничено мощностью сервера. Как правило, количество данных, которые pgpro_axe может обработать в одном SQL-запросе на стандартном сервере (256 ЦП, 2 ТБ оперативной памяти), не превышает 100 ТБ.

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

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

  • SQL-синтаксис pgpro_axe совместим с синтаксисом PostgreSQL, но не полностью повторяет его. Некоторые работающие в Postgres Pro запросы необходимо изменить, чтобы их можно было выполнить в pgpro_axe.