我正在尝试查询PostgreSQL数据库,但这是一个公共服务器,我真的不想长时间浪费大量CPU。
因此,我想知道是否有办法将我的查询时间限制在特定的持续时间内,例如3/5/10分钟。
我假设存在类似limit
的语法,但不是针对结果数量,而是针对查询持续时间。
谢谢你的帮助。
设置statement_timeout
,如果超过该限制,则查询将以错误终止。
根据本文件:
statement_timeout(整数(
中止任何花费超过指定的毫秒数,从命令从客户端到达服务器。如果log_min_error_startment设置为error或更低超时也将被记录。值为零(默认值(时关闭。
不建议在postgresql.conf中设置statement_timeout因为它会影响所有会话。
以下是使用LIMIT
控制查询运行时间的潜在问题。正确的是,您还应该在查询中使用ORDER BY
,告诉Postgres它应该如何准确地限制结果集的大小。但这里需要注意的是,当将LIMIT
与ORDER BY
一起使用时,Postgres通常必须实现整个结果集,然后还可能进行排序,这可能需要比读取整个结果集更长的时间。
对此的一个解决方法可能是只使用LIMIT
而不使用ORDER BY
。如果执行计划不包括读取整个表和排序,那么这可能是实现您想要的操作的一种方法。然而,请记住,如果你走这条路,Postgres将有免费的许可证,可以按任何顺序从表中返回任何记录。从业务或报告的角度来看,这可能不是您想要的。
但是,这里更好的方法是使用索引之类的东西来调整查询,并使其更快地达到不需要使用LIMIT
技巧的程度。