Не удается заставить log_min_duration_statement работать - PullRequest
5 голосов
/ 07 декабря 2011

Я гуглю более 2 часов, но я действительно застрял с этим.
Я хочу, чтобы PostgreSQL (я использую версию 8.4 в Debian) начинал регистрировать только медленные запросы.

Для этого я использую следующую конфигурацию в postgresql.conf:

log_destination = 'csvlog'
logging_collector = on
log_min_messages = log
log_min_duration_statement = 1000
log_duration = on
log_line_prefix = '%t '
log_statement = 'all' 

Остальная конфигурация полностью настроена по умолчанию (закомментировано).Регистрация работает, но она регистрирует все операторы, даже те, которые ниже порога 1000 (мс).Если я делаю «показать все», я вижу, что все настройки действуют.Я также попытался перезапустить Postgres.

Я надеюсь, что кто-то может мне помочь.

Ответы [ 2 ]

17 голосов
/ 08 декабря 2011
log_statement = 'all'

поручает серверу регистрировать все операторы, так просто. Кроме того,

log_duration = on

также указывает серверу регистрировать все операторы, включая информацию о продолжительности.
Измените это на

log_statement = none
log_duration = off

Котировки не нужны. Или закомментируйте их и перезагрузите. Тогда никакие операторы не будут записаны, кроме тех, которые работают дольше 1000 мс - по указанию

log_min_duration_statement = 1000

Это все в отличном руководстве .

0 голосов
/ 07 декабря 2011

Должно быть:

log_destination = 'csvlog'
logging_collector = on
log_min_duration_statement = 1000
log_line_prefix = '%t %p %r %d %u '### more context
log_statement = 'ddl' ### log schema changes 
...