我想記錄每天運行的每個查詢執行時間。我可以在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