我想记录每天运行的每个查询执行时间。
例如,像这样,
2012-10-01 13:23:38 STATEMENT: SELECT * FROM pg_stat_database runtime:265 ms.
请给我一些指导。
答案 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
。这将帮助您找到在视图中正确记录的每个查询的查询执行时间