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.