Wygląda na to, że w aplikacji jest wyciek połączenia, ponieważ nie może zamknąć połączonych połączeń. Nie masz problemów tylko z sesjami <idle> in transaction
, ale ze zbyt dużą liczbą połączeń.
Zabijanie połączeń nie jest właściwą odpowiedzią, ale jest to tymczasowe obejście problemu.
Zamiast ponownie uruchamiać PostgreSQL, aby uruchomić wszystkie inne połączenia z bazy danych PostgreSQL, zobacz: How do I detach all other users from a postgres database? i How to drop a PostgreSQL database if there are active connections to it?. Ta ostatnia pokazuje lepsze zapytanie.
Aby ustawić limity czasu, jak @Doon zasugerował, zobacz How to close idle connections in PostgreSQL automatically?, który zaleca użycie PgBouncer do proxy dla PostgreSQL i zarządzanie bezczynnymi połączeniami. Jest to bardzo dobry pomysł, jeśli masz wadliwą aplikację, która i tak przecieka połączenia; I bardzo mocno polecam konfigurację PgBouncer.
Nie wykona tutaj żadnej pracy, ponieważ aplikacja jest nadal podłączona i jest żywa, po prostu nie powinna być.
W PostgreSQL 9.2 i wyżej, można użyć nowej kolumny state_change
datownika i pole pg_stat_activity
status
wdrożyć żniwiarka bezczynności połączenia. Mieć pracę cron uruchomić coś takiego:
SELECT pg_terminate_backend(pid)
FROM pg_stat_activity
WHERE datname = 'regress'
AND pid <> pg_backend_pid()
AND state = 'idle'
AND state_change < current_timestamp - INTERVAL '5' MINUTE;
w starszych wersjach należy wdrożyć skomplikowane systemy, które śledzą gdy połączenie poszedł bezczynny. Nie zawracaj sobie głowy; po prostu użyj pgbouncer.
jak są łączysz się z DB? socketTimeout może być tym, czego szukasz. – Doon
Mamy starą aplikację internetową Pylons i użyliśmy SQLAlchemy, ale najwyraźniej nie używaliśmy jej poprawnie. Nie pamiętam. Próbujemy naprawić wyciek. 'socketTimeout' z dokumentu wygląda tak, jak zamknięcie połączenia z bazą danych. Próbuję zamknąć każdy bezczynny, a licznik rozpoczyna się natychmiast po ustanowieniu połączenia. – user1012451
patrz http://stackoverflow.com/questions/12391174/is-it-possible-to-configure-postgresql-to-automatically-close-idle-connections – Doon