postgresql - AWS Aurora Postgres 中的并行计划/查询

标签 postgresql amazon-web-services parallel-processing amazon-aurora

并行是指将单个(分析)查询的工作负载分配给多个线程甚至副本。

我看到 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/

  1. 我推断 AWS Aurora Postgres 支持并行计划是否正确?
  2. 如果是这样,这是否意味着普通 RDS Postgres 在分析查询方面可能比 Aurora 性能更高?
  3. 对 Aurora Postgres 的查询并行性的 future 支持有任何了解吗?

非常感谢!

最佳答案

一些解释:

postgres9.6+ 中的“并行计划”将做你想做的事:通过启动并行执行进程来加速单个查询。

适用于 MySQL 的 Aurora“并行查询”是完全不同的东西,尽管它也会产生您想要的结果。

Aurora(适用于 MySQL 和 postgres)有一个特殊的分布式存储层,保留 6 个冗余副本,可用于只读副本和故障恢复。 “并行查询”利用此存储层(包括存储和关联的 CPU 来管理存储)来执行一些查询计算,卸载 DB VM。

例如,过滤掉与查询无关的行和列可以下推到存储层,而不是将所有数据读回 VM 并在那里丢弃。

总结一下:

postgres9.6+中的“并行计划”在VM内部创建并行执行进程

Aurora 中的“并行查询”将计算下推到存储层,卸载 VM。

问题的答案:

  1. 正确
  2. 也许:见上文。取决于将数据过滤下推到存储层所获得的好处。
  3. 根据 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+ 中的“平行计划”是一个开始。 Aurora“并行查询”是另一种不同的方法。可能还有其他方法可以加速 postgres 的分析……我希望在 AWS 之外的多个云上看到这样的解决方案:Azure、GCP。

我已经提交了 Azure 请求 - 如果您同意,请在那里投票:

https://feedback.azure.com/forums/597976-azure-database-for-postgresql/suggestions/35794984-transactional-db-with-analytics

关于postgresql - AWS Aurora Postgres 中的并行计划/查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52061609/

相关文章:

ruby-on-rails - Heroku 上的 'Reset' 和 'Destroy' 数据库与 Postgres 之间的区别?

python - 为道路修建十字路口时出错

sql - postgreSQL 中的循环表

java - Hibernate异常: Could not determine a type for class exception with spring-data-jpa native query for postgresql

amazon-web-services - AWS 中的弹性 IP 是什么以及它为何有用?

c - 在 MPI 中运行我的代码时,尽管遵循正确的语法,但根进程永远不会执行

mysql - 亚马逊 RDS : Restore snapshot to existing instance

ruby-on-rails - 从 AWS S3 读取 CSV 文件时获取 "Errno::ENOENT: No such file or directory @ rb_sysopen"

c++ - MS concurrency::parallel_for() 单次迭代的性能

c++ - 如何设计一种数据结构,为 CUDA 中的每个线程吐出一个可用空间