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

时间:2012-10-01 09:35:46

标签: postgresql

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

例如,像这样,

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

请给我一些指导。

3 个答案:

答案 0 :(得分:27)

如果您设置

log_min_duration_statement = 0
log_statement = all 
在postgresql.conf中

,您将看到所有语句都被记录到Postgres日志文件中。

如果您启用

log_duration

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

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

这将在logfile中生成这样的输出:

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

手册中的更多细节:

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

答案 1 :(得分:3)

我认为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/

重新加载配置。

答案 2 :(得分:0)

我认为一个更好的选择是通过启用PG统计信息扩展名来启用df['Number of Sales'] *= df['Price'] d1 = {'Product':'size', 'Price':['sum', 'mean'], 'Number of Sales':'mean'} df = df.groupby('Vendor').agg(d1) df.columns = df.columns.map('_'.join) d = {'Product_size':'No. of Product', 'Price_sum':'Sum of Prices', 'Price_mean':'Mean of Prices', 'Number of Sales_mean':'H Factor' } df = df.rename(columns=d).reset_index() print (df) Vendor No. of Product Sum of Prices Mean of Prices H Factor 0 A 4 121 30.25 6050.0 1 B 1 12 12.00 1440.0 2 C 2 47 23.50 587.5 3 H 1 45 45.00 9000.0 。这将帮助您找到在视图中正确记录的每个查询的查询执行时间