限制 PostgreSQL 客户端的查询时间
limit query time in the client side of PostgreSQL
我正在尝试查询 PostgreSQL 数据库,但这是一个 public 服务器,我真的不想长时间浪费很多 CPU。
所以我想知道是否有某种方法可以将我的查询时间限制为特定持续时间,例如 3/5/10 分钟。
我假设有类似 limit
的语法,但不是针对结果数量而是针对查询持续时间。
感谢您的帮助。
这里有一个潜在问题,即使用 LIMIT
来控制查询可能 运行 的时间长度。正确的是,您还应该在查询中使用 ORDER BY
,以告诉 Postgres 它应该如何限制结果集的大小。但这里需要注意的是,当使用 LIMIT
和 ORDER BY
时,Postgres 通常必须具体化整个结果集,然后还可能进行排序,这可能比仅读取整个结果集花费更长的时间。
一个解决方法可能是只使用 LIMIT
而没有 ORDER BY
。如果执行计划不包括读取整个 table 和排序,这可能是一种做你想做的事情的方法。但是,请记住,如果你走这条路,Postgres 将获得 return any 记录的免费许可 table 它希望以任何顺序。从业务或报告的角度来看,这可能不是您想要的。
但是,这里更好的方法是使用索引之类的东西调整查询,并使其更快到不需要诉诸 LIMIT
技巧的程度。
设置statement_timeout
,如果超过该限制,您的查询将终止并报错。
根据 this 文档:
statement_timeout (integer)
Abort any statement that takes more than
the specified number of milliseconds, starting from the time the
command arrives at the server from the client. If
log_min_error_statement is set to ERROR or lower, the statement that
timed out will also be logged. A value of zero (the default) turns
this off.
Setting statement_timeout in postgresql.conf is not recommended
because it would affect all sessions.
我正在尝试查询 PostgreSQL 数据库,但这是一个 public 服务器,我真的不想长时间浪费很多 CPU。
所以我想知道是否有某种方法可以将我的查询时间限制为特定持续时间,例如 3/5/10 分钟。
我假设有类似 limit
的语法,但不是针对结果数量而是针对查询持续时间。
感谢您的帮助。
这里有一个潜在问题,即使用 LIMIT
来控制查询可能 运行 的时间长度。正确的是,您还应该在查询中使用 ORDER BY
,以告诉 Postgres 它应该如何限制结果集的大小。但这里需要注意的是,当使用 LIMIT
和 ORDER BY
时,Postgres 通常必须具体化整个结果集,然后还可能进行排序,这可能比仅读取整个结果集花费更长的时间。
一个解决方法可能是只使用 LIMIT
而没有 ORDER BY
。如果执行计划不包括读取整个 table 和排序,这可能是一种做你想做的事情的方法。但是,请记住,如果你走这条路,Postgres 将获得 return any 记录的免费许可 table 它希望以任何顺序。从业务或报告的角度来看,这可能不是您想要的。
但是,这里更好的方法是使用索引之类的东西调整查询,并使其更快到不需要诉诸 LIMIT
技巧的程度。
设置statement_timeout
,如果超过该限制,您的查询将终止并报错。
根据 this 文档:
statement_timeout (integer)
Abort any statement that takes more than the specified number of milliseconds, starting from the time the command arrives at the server from the client. If log_min_error_statement is set to ERROR or lower, the statement that timed out will also be logged. A value of zero (the default) turns this off.
Setting statement_timeout in postgresql.conf is not recommended because it would affect all sessions.