我想记录一天内运行的每个查询执行时间。
比如像这样,
2012-10-01 13:23:38 STATEMENT: SELECT * FROM pg_stat_database runtime:265 ms.
请给我一些指导。
我想记录一天内运行的每个查询执行时间。
比如像这样,
2012-10-01 13:23:38 STATEMENT: SELECT * FROM pg_stat_database runtime:265 ms.
请给我一些指导。
如果你设置
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 毫秒
手册中的更多详细信息:
如果您想要每日列表,您可能希望将日志文件配置为每天轮换。同样,这在手册中有所描述。
我相信 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/
重新加载配置。
我认为更好的选择是pg_stat_statements
通过启用 PG stats 扩展来启用。这将帮助您找到很好地记录在视图中的每个查询的查询执行时间