15

我想记录一天内运行的每个查询执行时间。

比如像这样,

2012-10-01 13:23:38 STATEMENT: SELECT * FROM pg_stat_database  runtime:265 ms.

请给我一些指导。

4

3 回答 3

36

如果你设置

log_min_duration_statement = 0
log_statement = all 

在您的 postgresql.conf 中,您将看到所有语句都记录到 Postgres 日志文件中。

如果启用

log_duration

这还将打印每个语句所花费的时间。默认情况下这是关闭的。

使用该log_statement参数,您可以控制要记录的语句类型(DDL、DML、...)

这将在日志文件中产生如下输出:

2012-10-01 13:00:43 CEST postgres LOG:声明:从 pg_class 中选择计数(*);
2012-10-01 13:00:43 CEST postgres 日志:持续时间:47.000 毫秒

手册中的更多详细信息:

如果您想要每日列表,您可能希望将日志文件配置为每天轮换。同样,这在手册中有所描述。

于 2012-10-01T09:42:33.930 回答
5

我相信 OP 实际上是在询问执行持续时间,而不是时间戳。

要在日志输出中包含持续时间,请打开pgsql/<version>/data/postgresql.conf,找到读取的行

#log_duration = off

并将其更改为

log_duration = on

如果找不到给定的参数,只需将其添加到文件的新行中即可。

保存更改后,重新启动 postgresql 服务,或者只是调用

pg_ctl reload -D <path to the directory of postgresql.conf>

例如

pg_ctl reload -D /var/lib/pgsql/9.2/data/

重新加载配置。

于 2014-06-20T11:40:34.593 回答
3

我认为更好的选择是pg_stat_statements通过启用 PG stats 扩展来启用。这将帮助您找到很好地记录在视图中的每个查询的查询执行时间

于 2018-10-29T12:00:48.047 回答