我试图查询PostgreSQL数据库,但这是一个公共服务器,我真的不想浪费很多CPU很长一段时间。
因此,我想知道是否有什么方法可以限制我的查询时间,例如,3/5/10分钟。
我假设有类似于limit的语法,但不是针对结果数量,而是针对查询持续时间。
谢谢你的帮助。
发布于 2020-02-18 15:29:53
设置statement_timeout,则如果查询超过该限制,则将以错误终止查询。
根据这文档:
statement_timeout (整数) 从命令从客户端到达服务器的时间开始,中止占用指定毫秒数的任何语句。如果log_min_error_statement设置为错误或更低,那么超时的语句也将被记录下来。如果值为零(默认值),则会关闭此选项。 不建议在statement_timeout中设置postgresql.conf,因为它会影响所有会话。
发布于 2020-02-18 15:09:01
下面是使用LIMIT来控制查询运行时间的潜在问题。正确地说,您还应该在查询中使用ORDER BY,告诉Postgres它应该如何精确地限制结果集的大小。但是这里要注意的是,Postgres在使用LIMIT和ORDER BY时通常必须实现整个结果集,然后也可能进行排序,这可能需要花费更长的时间,而不仅仅是读取整个结果集。
解决这一问题的方法之一可能是不使用LIMIT而不使用ORDER BY。如果执行计划不包括读取整个表和排序,那么它可能是实现您所需的一种方法。但是,请记住,如果您走这条路线,Postgres将获得免费许可,可以按任何顺序从它希望的表中返回任何记录。从业务或报告的角度来看,这可能不是您想要的。
但是,这里一个更好的方法是使用索引之类的东西来调优您的查询,并使其更快到不需要使用LIMIT技巧的程度。
https://stackoverflow.com/questions/60283821
复制相似问题