我想记录每天运行的每个查询执行时间。我可以在PostgresSQL 8.4中记录查询执行时间吗?
例如像这样,
2012-10-01 13:23:38 STATEMENT: SELECT * FROM pg_stat_database runtime:265 ms.
请给我一些指导。
我想记录每天运行的每个查询执行时间。我可以在PostgresSQL 8.4中记录查询执行时间吗?
例如像这样,
2012-10-01 13:23:38 STATEMENT: SELECT * FROM pg_stat_database runtime:265 ms.
请给我一些指导。
如果您在postgresql.conf中设置,
log_min_duration_statement = 0
log_statement = all
,然后你会看到被记录到Postgres日志文件的所有语句。
如果启用
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
在手册中的更多细节:
如果您想要每日列表,您可能需要配置日志文件以便每天进行轮换。再次在手册中对此进行了描述。
我相信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/
重新加载配置。
谢谢!为指导Mr.a_horse_with_no_name, 但只有查询是日志当我在postgresql.conf中更改,我真正想要的是查询和相关的执行时间。 – 9ine
@ 9ine:你的意思是“只有查询是日志”?这就是你要求的:记录查询。 –
我的意思是查询和相关的执行时间。 – 9ine