ustawienie log_min_duration_statement jest ignorowane

15

Używam Postgresql 9.1Ubuntu. Dokładna wersja Postgresql jest taka, 9.1+129ubuntu1jak pokazuje mój menedżer pakietów.

Mam 2 bazy danych, które są aktywnie używane i są używane ze zdalnego serwera.

Chcę rejestrować zapytania o długim czasie wykonywania. Ustawiłem więc następujące parametry w /etc/postgresql/9.1/main/postgresql.confpliku

log_min_duration_statement = 10000
log_statement = 'mod'

więc Postgresql będzie rejestrował zapytania trwające dłużej niż 10 sekund.

Ale kiedy jestem reloadw konfiguracji postgres, Postgresql zaczyna rejestrować każde zapytanie pasujące do log_statementwartości. Że dla pewności ustawiłem czas trwania na 100 sekund

log_min_duration_statement = 100000

Ale Postgresql rejestruje każde zapytanie pasujące do log_statementwartości, niezależnie od log_min_duration_statementwartości.

Ustawienie wydaje log_statementsię, noneże przestaje się rejestrować.

Czy jest coś, czego mi brakowało w konfiguracji?

Upadły anioł
źródło
Chodzi o to, że rejestrujesz połączenie dwóch zbiorów, a nie ich przecięcie. Nie wiem, czy można to zrobić tak, jak chcesz.
dezso
Więc powinienem wyłączyć (skomentować), log_statementwięc log_min_duration_statementpowinienem działać?
FallenAngel
Jeśli chcesz po prostu zarejestrować wszystkie długo działające instrukcje (czy to a SELECT, UPDATEczy jakiś DDL), to tak.
dezso

Odpowiedzi:

21

Byłeś blisko Twój ostatni pomysł to właściwie droga:

log_statement = none
log_min_duration_statement = 10000

Wówczas żadna instrukcja nie zostanie zarejestrowana, z wyjątkiem tych, które działają dłużej niż 10 sekund - łącznie z samym ciągiem zapytania. Wydaje się, że rejestrowanie zostało zatrzymane, ponieważ 10 sekund to wysoki próg. Używam normalnie 2 sekundy, ale YMMV.

Ta pokrewna odpowiedź na SO ma więcej:
Nie można uruchomić log_min_duration_statement do działania

Erwin Brandstetter
źródło
3
Dodam, że domyślnym ustawieniem log_statementjest none, więc nie ustawienie go lub ustawienie na nonetaki sam efekt.
dezso