PostgreSQL 8.4能否记录查询执行时间?

19

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

例如,像这样:

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

请给我一些指导方针。

3个回答

37
如果您设置了
log_min_duration_statement = 0
log_statement = all 

在你的postgresql.conf文件中启用该选项,那么你将看到所有语句都被记录在Postgres日志文件中。
如果你启用了该选项,所有的SQL语句都会被记录在日志文件中。
log_duration

该参数还可以打印每个语句执行所需的时间。默认情况下,此功能未开启。

使用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

有关详细信息,请参见手册:

如果您想要每天的列表,可能需要配置日志文件以每天旋转。同样,这也在手册中有描述。


感谢a_horse_with_no_name先生的指导, 但是我只能记录更改postgresql.conf时的查询日志,我真正想要的是查询和相关执行时间。 - 9ine
@9ine:你说的“only query is log”是什么意思?这就是你要求的:记录查询。 - user330315
我指的是查询和相关执行时间。 - 9ine
@9ine:查询执行时间都已记录。再来,你有什么问题? - user330315

7

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

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

#log_duration = off

并将其更改为

log_duration = on

如果找不到给定的参数,在文件中添加一个新行。

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

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

e.g.

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

重新加载配置。

3

我认为更好的选择是通过启用PG统计扩展来启用pg_stat_statements。这将帮助您在视图中找到每个查询的查询执行时间,记录得非常清晰。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接