【发布时间】:2018-02-23 17:38:11
【问题描述】:
我们有一个相当大的 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 和内存。但它并没有像我们预期的那样工作。设置有什么问题吗?或者还有什么我不知道的?
【问题讨论】:
-
你有 sar 可用吗?每个主机的磁盘 IO 是怎样的?增加查询次数时,你的磁盘 IO 能否赶上?
-
磁盘 io、CPU、内存都低于 50%,除了主节点的 CPU 稍微高一点,最高 60%。无论我们向集群中推送多少查询,我们都只能获得 3-5 个查询/秒。
-
如果您有一个大约需要 10 秒运行的查询,如果有 5 个查询,它预计会在 50 秒内运行。这里没有什么异常。您是否尝试过查询或数据库优化?通过数据库优化,您可以创建 INDEX (gpdb.docs.pivotal.io/4390/admin_guide/ddl/ddl-index.html) 和/或启用 Pivotal Query Optimizer (gpdb.docs.pivotal.io/4390/admin_guide/query/topics/…)。另外,您是否查看过这篇文章:gpdb.docs.pivotal.io/4390/admin_guide/load/topics/…?
-
另外,您给我们的时间是数据库需要获取数据的时间还是应用程序(或浏览器)需要呈现结果的时间?即使是数据库中的时间,您是否考虑过将数据从数据库返回到工作站的网络时间?也许还有另一个罪魁祸首(而且不是你的数据库)。
标签: greenplum