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

前端之家收集整理的这篇文章主要介绍了如何减少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)以阻止规划人员选择这些类型的计划,但并不总是可行.

猜你在找的Postgre SQL相关文章