调整慢速分组函数 Invantive SQL

Tune slow grouping functions Invantive SQL

我在 PostgreSQL 上有一个数据库,其中包含一些非常大的表(包含事件和事件度量)。对于测量的日期范围和一种事件类型,我想使用 Invantive SQL.

计算平均持续时间

事件(简化后,大约 5 GB):

event_measurements,大约 50 GB:

当我 运行 像

这样的查询时
select avg(ended - started) 
from events 
   join event_measurements on events.id = event_measurements.event_id 
where events.type_code = '...'

它 运行 小时消耗 GB 的内存。

需要的索引都准备好了,包括外键索引。

从会话 I/Os 中,我看到 Invantive SQL 首先下载详细信息并在客户端执行分组。这对小卷来说很好,但在这种情况下,我希望有更多的本机性能,比如这样的查询需要 5 分钟。

周围的查询需要 Invantive SQL,因此 "force native SQL" 不能打开数据库。

如何在不切换到 "force native SQL" 的情况下提高此查询的性能?

除了按照@GordonLinoff 的建议创建视图,您还可以使用:

  • local log on 在各个语句之间切换连接,
  • insert into nativeplatformrequests(payload_text) values ( 'select avg...') 绕过 Invantive SQL。就像 Oracle 上的 EXECUTE IMMEDIATE