【问题标题】:Group by too slow on Amazon RDS PostgresAmazon RDS Postgres 上的 Group by 太慢了
【发布时间】:2015-11-29 20:04:39
【问题描述】:

我在 Amazon RDS db.r3.4xlarge 实例上运行 Postgres 9.4.4 - 16 个 CPU,122GB 内存。 我最近遇到了一个查询,它需要在一张大表(约 2.7 亿条记录)上进行相当直接的聚合。该查询需要 5 多个小时才能执行。

大表上的连接列和分组列已定义索引。我曾尝试通过将 work_memtemp_buffers 设置为 1GB 来进行试验,但它帮助很大。

这是查询和执行计划。任何线索都将受到高度赞赏。

explain SELECT
largetable.column_group,
MAX(largetable.event_captured_dt) AS last_open_date,
.....   

FROM largetable

LEFT JOIN smalltable
ON smalltable.column_b = largetable.column_a

WHERE largetable.column_group IS NOT NULL

GROUP BY largetable.column_group

这是执行计划 -

GroupAggregate  (cost=699299968.28..954348399.96 rows=685311 width=38)
  Group Key: largetable.column_group
  ->  Sort  (cost=699299968.28..707801354.23 rows=3400554381 width=38)
        Sort Key: largetable.column_group
        ->  Merge Left Join  (cost=25512.78..67955201.22 rows=3400554381 width=38)
              Merge Cond: (largetable.column_a = smalltable.column_b)
              ->  Index Scan using xcrmstg_largetable_launch_id on largetable  (cost=0.57..16241746.24 rows=271850823 width=34)
                    Filter: (column_a IS NOT NULL)
              ->  Sort  (cost=25512.21..26127.21 rows=246000 width=4)
                    Sort Key: smalltable.column_b
                    ->  Seq Scan on smalltable  (cost=0.00..3485.00 rows=246000 width=4)

【问题讨论】:

    标签: postgresql amazon-web-services amazon-rds database-tuning query-tuning


    【解决方案1】:

    你说大表上的join key和grouping key被索引了,但是你没有提到小表上的joining key。

    合并和排序是导致缓慢的一大原因。但是,我也担心您会返回约 700,000 行数据。这对你真的有用吗?什么情况下需要返回这么多数据,但等待 5 小时太长?如果您不需要输出所有数据,那么尽早进行过滤是您将实现的最大速度增益。

    【讨论】:

    • 感谢您的意见。我也尝试过索引较小的表,但同样,它帮助很大。还有关于及早过滤行,不幸的是我们每天都需要生成整个数据集。当我们使用 Redshift 执行相同的任务时,它似乎工作正常(不到 10 分钟)。但是,由于一些技术要求,我们需要转向 RDS。
    • 这是有道理的。 Redshift 会分片您的数据,并且您将并行执行多个较小的连接。也许您应该尝试改变这些技术要求。在 RS 中花费 10 分钟运行查询后,您还有 290 分钟的工作时间,然后才能像当前解决方案一样慢。
    猜你喜欢
    • 2010-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-03
    • 1970-01-01
    • 2021-08-30
    • 1970-01-01
    相关资源
    最近更新 更多