log_min_duration_statement设置被忽略


15

Postgresql 9.1在Ubuntu上运行。确切的Postgresql版本9.1+129ubuntu1如我的软件包管理器所示。

我有2个正在积极使用的数据库,它们是从远程服务器使用的。

我希望记录执行时间较长的查询。所以我在/etc/postgresql/9.1/main/postgresql.conf文件中设置以下参数

log_min_duration_statement = 10000
log_statement = 'mod'

因此Postgresql将记录超过10秒的查询。

但是当我reload使用postgres配置时,Postgresql开始记录每个适合log_statement值的查询。我将持续时间设置为100秒以确保

log_min_duration_statement = 100000

但是Postgresql会记录所有适合log_statement值的查询,无论log_min_duration_statement值如何。

设置log_statementnone似乎停止记录。

我有什么想念的配置吗?


问题是您记录了两个集合的并集,而不是它们的交集。我不知道是否可以按照您的意愿进行。
dezso 2014年

那么,我应该禁用(注释掉)log_statement以便log_min_duration_statement工作吗?
FallenAngel 2014年

如果你只是想记录所有长时间运行的语句(可能是一个SELECTUPDATE或者一些DDL),然后是。
dezso 2014年

Answers:


21

你近了 您的最后一个想法实际上是要走的路:

log_statement = none
log_min_duration_statement = 10000

然后,除了运行时间超过10秒的语句(包括查询字符串本身)以外,将不记录任何语句。记录似乎已停止,因为10秒是一个高阈值。我通常使用2秒,但是使用YMMV。

关于SO的这个相关答案还有更多:
无法使log_min_duration_statement正常工作


3
让我补充一点,for的默认值log_statementnone,因此不要将其设置或设置为none具有相同的效果。
dezso 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.