Presto性能调整,并行执行时查询要慢得多

Sas*_*ota 10 sql performance sqlperformance presto

我有一个presto集群配置了12个工作程序,Java应用程序正在查询它们.群集能够执行30个并发请求(如果有更多,则它们排队).

应用程序可能会发送大约80-100个不同的查询,我希望这些查询由集群处理.

问题:当按顺序执行查询时,它们的完成速度明显快于并行执行查询时的速度.

例如,如果我按顺序运行100个查询,则每个查询需要1-12秒才能完成,并且它们都会在大约2分钟内完成.但如果我并行启动所有这些,则需要大约8-12分钟才能完成所有这些操作.在拐角处,最多需要30分钟.

如果我查看presto控制台,我发现大多数查询被阻止,只有1-3个实际上处于Running状态.

不幸的是我无法发布任何查询.它们通常访问不同的模式(一个查询中最多6个),它们充满了连接和嵌套查询.同时,大多数都是按照最佳实践编写的.

问题:如何提高性能?至少我应该调查哪些方面来找出根本原因?

以下是一个最慢查询的指标(可能是数字会对您说些什么).

Resource Utilization Summary

CPU Time            8.42m
Scheduled Time      26.04m
Blocked Time        4.77d
Input Rows          298M
Input Data          9.94GB
Raw Input Rows      323M
Raw Input Data      4.34GB
Peak Memory         10.18GB
Memory Pool         reserved
Cumulative Memory   181G seconds

Timeline

Parallelism         477
Scheduled Time/s    1.47K
Input Rows/s        281K
Input Bytes/s       9.60MB
Memory Utilization  0B
Run Code Online (Sandbox Code Playgroud)

Sas*_*ota 1

看来我自己已经解决了这个问题。

Presto 是一个分布式 SQL 查询引擎。而这里的关键词是分布式。它保证如果您运行查询,它会在工作人员之间有效分配并高速执行。

执行并行查询并期望 Presto 找出如何有效地并行它们很可能是一种误用。它更像是关系数据库方法,不幸的是在 Presto 中不起作用。