调整慢速分组功能Invantive SQL

时间:2017-09-11 11:48:20

标签: postgresql performance invantive-sql

我在PostgreSQL上有一个数据库,里面有一些非常大的表(包含事件和事件测量)。对于测量的日期范围和一种事件类型,我想用Invantive SQL计算平均持续时间。

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

  • ID
  • 类型代码

event_measurements,大约50 GB:

  • event_id的
  • 开始
  • 结束

当我运行像

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

它运行几个小时消耗GB的内部存储器。

必要的索引都已到位,包括外键索引。

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

周围的查询需要Invantive SQL,所以"强制原生SQL"开启数据库不是一种选择。

如何在不切换到"强制原生SQL"?

的情况下,如何提高此查询的性能

1 个答案:

答案 0 :(得分:0)

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

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