我们有一个相当大的Greenplum v4.3集群。18台主机,每台主机有3个段节点。每台主机大约有40个内核和60G内存。
我们的表有30列宽,有1亿行。当没有并发压力时,我们测试的查询有3-10秒的响应时间。随着我们并行触发的查询数量的增加,延迟从平均3秒减少到50秒,正如预期的那样。
但我们发现,无论我们并行触发了多少查询,我们只有非常低的QPS(每秒查询数),几乎只有3-5个查询/秒。我们设置了max_memory=60G、memory_limit=800MB和active_statments=100,希望CPU和内存能得到很高的利用率,但它们的利用率仍然很低,比如30%-40%。
我有一种强烈的感觉,我们试图并行地填充集群,希望最大限度地利用CPU和内存利用率。但它并不像我们预期的那样工作。设置有什么问题吗?或者还有其他我不知道的事情吗?
发布于 2018-06-20 01:39:32
造成这种行为的原因可能有多种。
首先,每个Greenplum查询在一个逻辑段上使用的处理器核心不超过一个。假设您在每个节点上有3个数据段,每个节点有40个物理核心。运行两个并行查询将在每个节点上使用最大的2 x 3 = 6核心,因此您将需要关于40 / 6 ~= 6并行查询来利用您的所有CPU。因此,对于每个节点的核心数量,最好创建更多的段(gpexpand可以做到这一点)。顺便问一下,查询中使用的表是压缩的吗?
其次,这可能是一个糟糕的查询。如果您将为查询提供一个计划,它可能有助于理解。Greenplum中有一些查询类型可能会将master作为瓶颈。
最后,这可能是一些错误的OS或blockdev设置。
发布于 2018-08-01 10:26:35
我认为这个文档页面Managing Resources可能会帮助你管理你的资源
注意: ACTIVE_STATEMENTS将是当前运行的总语句,当您有50s的开销查询和下一个传入的查询时,这可能无法工作,mybe 5* 50更好。此外,您还需要配置内存/CPU设置才能继续执行查询。
https://stackoverflow.com/questions/46224134
复制相似问题