Postgres:如何查看数据库服务器正在执行的所有SQL语句?


Answers:


27

您正在寻找的config选项是log_statement = "all"(如果您只想要语句),或者log_min_statement_duration = <some number>仅在“慢”查询之后(对于“慢”的某个值)。有关日志记录配置的更多详细信息,请参见http://www.postgresql.org/docs/current/static/runtime-config-logging.html


1
记录所有语句是性能杀手(如官方文档中所述)。但是,8.4具有一个很好的功能,可以在执行explain analyze时获得缓慢的查询,您可能要开始测试,因为8.4尚未发布,但是知道执行时发生的情况是一个不错的选择,如果分析说明输出没问题,则可能是由于I / O或CPU范围问题,但至少您会知道这不是查询本身
serverhorror 2009年

5
我真的很喜欢log_statement ='mod'选项。它仅显示创建,更新和删除,并跳过所有select语句。如果您想弄清楚哪些代码正在调整某个字段,那就太好了。
唐·柯比

5

auto_explain模块对此非常有用。它不仅会记录语句,还会记录它们的执行计划,甚至可以记录在PL / PgSQL函数中运行的语句。除非启用分析,否则性能影响会相当低,在这种情况下,所有查询都会产生相当大的计时开销。

请参阅auto_explain文档。


请注意,“ auto_explain”是一个模块,因此不会在AWS RDS Postgres数据库上运行:(
johntellsall

1
@johntellsall RDS支持auto_explain,这在他们的祝福模块列表中。请参阅docs.aws.amazon.com/AmazonRDS/latest/UserGuide/…上
Craig Ringer

3

当然,您可以自己检测最慢的查询,但是我建议您使用pgFouine -PostgreSQL日志分析器。它易于安装,非常有用。

样本报告:此处此处


我在一个项目上使用了pgFouine,并确定了索引可以在很大程度上帮助事情的几个地方。
Paul Tomblin,2009年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.