Параллельные планы / запросы в AWS Aurora Postgres
Параллельно я имею в виду распределение рабочей нагрузки одного (аналитического) запроса по нескольким потокам или даже репликам.
Я вижу, что OSS Postgres поддерживает их с 9.6: https://www.postgresql.org/docs/9.6/static/parallel-plans.html
AWS Aurora добавил предварительный просмотр этого, но только для варианта MySQL: https://aws.amazon.com/about-aws/whats-new/2018/02/amazon-aurora-parallel-query-is-available-for-preview/
Но обычная AWS RDS (не Aurora) поддерживает их благодаря наличию Postgres 9.6: https://aws.amazon.com/blogs/database/performing-parallel-queries-and-phrase-searching-with-amazon-rds-for-postgresql-9-6-1/
- Правильно ли я понимаю, что AWS Aurora Postgres не поддерживает параллельный план?
- Если это так, означает ли это, что обычный RDS Postgres может быть более производительным, чем Aurora для аналитических запросов?
- Любые знания о будущей поддержке параллелизма запросов для Aurora Postgres?
Большое спасибо!
1 ответ
Я слышал только о параллельном запросе для Aurora MySQL совместимого издания. Я предполагаю, что эта функция все еще находится в бета-версии и в настоящее время имеет много ограничений. Я думаю, что Amazon в первую очередь фокусируется на версии, совместимой с MySQL. Когда дело доходит до сравнения PostgreSQL RDS и Aurora, трудно сказать, потому что это зависит от конкретного случая использования. Архитектура у них обоих совершенно разная.
Если вам нужен параллельный запрос, возможно, вам стоит взглянуть на AWS Redshift. Это PostgreSQL 8.0.2 с множеством дополнительных функций, таких как параллельный запрос или столбцовое хранилище:
https://docs.aws.amazon.com/redshift/latest/dg/c_redshift_system_overview.html
- Да ты прав.
- Трудно сказать, потому что это зависит от конкретного случая использования.
- Я принимал участие в программе Aurora Parallel Query Preview, но пока не видел никакой информации о совместимом с PostgreSQL выпуске.
Некоторые объяснения:
"параллельные планы" в postgres9.6+ будут делать то, что вы хотите: ускорить один запрос, начав параллельные процессы выполнения.
"Параллельный запрос" Aurora для MySQL - это нечто совершенно иное, хотя это также приводит к тому, что вы хотите.
Aurora (для MySQL и postgres) имеет специальный распределенный слой хранения, который хранит 6 избыточных копий, которые можно использовать для чтения-реплики и восстановления после сбоя. "параллельный запрос" использует этот уровень хранения (который включает в себя хранилище со связанными ЦП для управления хранилищем), чтобы выполнить некоторые вычисления запроса, разгрузив виртуальную машину БД.
Например, отфильтровывая строки и столбцы, не относящиеся к запросу, можно перенести на уровень хранения вместо чтения всех данных обратно в виртуальную машину и их отбрасывания там.
Итак, в заключение:
"параллельные планы" в postgres9.6+ создают параллельные процессы выполнения внутри виртуальной машины
"параллельный запрос" в Aurora откладывает вычисления на уровень хранения, разгрузив виртуальную машину.
Ответы на ваши вопросы:
- Правильный
- Возможно: см. Выше. Зависит от выгоды, которую вы получаете, отодвигая фильтрацию данных на уровень хранилища.
- Согласно блогу AWS, "параллельный запрос" для postgres находится в стадии разработки: "Мы запускаем с поддержкой MySQL 5.6 и работаем над поддержкой MySQL 5.7 и PostgreSQL". https://aws.amazon.com/blogs/aws/new-parallel-query-for-amazon-aurora/
Я думаю, что для поддержки "оперативной аналитики в реальном времени" в транзакционной системе postgres необходимо некоторое "значительное" увеличение postgres для аналитики. "параллельные планы" в 9.6+ - это начало. Аврора "параллельный запрос" - это другой, другой подход. Могут быть и другие подходы к ускорению аналитики на postgres... Я хотел бы увидеть такие решения для нескольких облаков за пределами AWS: Azure, GCP.
Я отправил запрос на Azure. Пожалуйста, оставьте отзыв там, если вы согласны: