调整慢速分组函数 Invantive SQL
Tune slow grouping functions Invantive SQL
我在 PostgreSQL 上有一个数据库,其中包含一些非常大的表(包含事件和事件度量)。对于测量的日期范围和一种事件类型,我想使用 Invantive SQL.
计算平均持续时间
事件(简化后,大约 5 GB):
- id
- type_code
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/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
。
我在 PostgreSQL 上有一个数据库,其中包含一些非常大的表(包含事件和事件度量)。对于测量的日期范围和一种事件类型,我想使用 Invantive SQL.
计算平均持续时间事件(简化后,大约 5 GB):
- id
- type_code
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/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
。