我可以在PostgreSQL 8.4中记录查询执行时间吗?

9in*_*ine 10 postgresql

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

比如这样,

2012-10-01 13:23:38 STATEMENT: SELECT * FROM pg_stat_database  runtime:265 ms.
Run Code Online (Sandbox Code Playgroud)

请给我一些指导.

a_h*_*ame 28

如果你设置

log_min_duration_statement = 0
log_statement = all 
Run Code Online (Sandbox Code Playgroud)

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

如果启用

log_duration
Run Code Online (Sandbox Code Playgroud)

这也将打印每个声明所用的时间.这是默认关闭.

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

这将在日志文件中生成这样的输出:

2012-10-01 13:00:43 CEST postgres LOG:  statement: select count(*) from pg_class;
2012-10-01 13:00:43 CEST postgres LOG:  duration: 47.000 ms

手册中的更多细节:

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


Zol*_*tán 7

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

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

#log_duration = off
Run Code Online (Sandbox Code Playgroud)

并将其更改为

log_duration = on
Run Code Online (Sandbox Code Playgroud)

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

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

pg_ctl reload -D <path to the directory of postgresql.conf>
Run Code Online (Sandbox Code Playgroud)

例如

pg_ctl reload -D /var/lib/pgsql/9.2/data/
Run Code Online (Sandbox Code Playgroud)

重新加载配置。