微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何减少PostgreSQL中长时间运行的i / o密集型查询的影响?

This post建议我可以使用游标以限制速率从查询获取.我该怎么做呢?我的目标是减少此低优先级查询对其他优先级较高的查询的影响.

解决方法

您可以通过使用DECLARE命令声明服务器端游标来执行此操作:

DECLARE my_cursor CURSOR FOR select * from foo;

然后重复使用FETCH命令读取其结果:

FETCH 10 FROM my_cursor;

通过在FETCH命令之间休眠,您可以有效地限制查询执行的速度.

完成后,您可以通过调用COMMIT,ROLLBACK或CLOSE my_cursor来摆脱光标

请注意,某些类型的查询无法通过游标直接进行流式处理,但会在生成第一行输出之前运行完成.具有散列聚合和大型非索引排序的查询就是一个例子.您可以降低cursor_tuple_fraction设置(认值为0.1)以阻止规划人员选择这些类型的计划,但并不总是可行.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐