【问题标题】:How to increase greenplum concurrency and # query per sec如何增加greenplum并发和#每秒查询
【发布时间】: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


【解决方案1】:

我认为此文档页面 Managing Resources 可能会帮助您管理您的资源

  • 您可以使用资源组限制/控制您的资源特别是并发属性(资源组中允许的最大并发事务数,包括活动和空闲事务)。
  • 资源队列帮助限制 ACTIVE_STATEMENTS

注意:ACTIVE_STATEMENTS 将是当前运行的总语句,当您有 50s 成本查询和下一个传入查询时,这将无法正常工作,mybe 5 * 50 更好。 此外,您需要配置内存/CPU 设置以使您的查询可以继续。

【讨论】:

    【解决方案2】:

    这种行为可能有多种原因。

    首先,每个 Greenplum 查询在一个逻辑段上使用的处理器内核不超过一个。假设每个节点上有 3 个段,有 40 个物理内核。运行两个并行查询将在每个节点上使用最大的 2 x 3 = 6 内核,因此您将需要大约 40 / 6 ~= 6 并行查询来利用所有 CPU。因此,也许对于每个节点的核心数量来说,创建更多段会更好(gpexpand 可以做到这一点)。顺便问一下,查询中使用的表是否已压缩?

    其次,这可能是一个错误的查询。如果您将提供查询计划,它可能有助于理解。 Greenplum 中有一些查询类型可能有 master 作为瓶颈。

    最后,这可能是一些糟糕的操作系统或 blockdev 设置。

    【讨论】:

      猜你喜欢
      • 2016-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多