PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Django ORM pozostawia bezczynne połączenia w Postgres DB

najwyraźniej się nie rozłącza. Korzystanie z db.close_connection() po zakończeniu zapytania pomogłoby. Również jeśli dobrze to rozumiem CONN_MAX_AGE do jakiejś krótkiej wartości może pomóc. I rozważ użycie jakiegoś poolera sesji, np. pgbouncera dla połączeń django. W ten sposób, jeśli masz zbyt wiele połączeń, będzie czekać (lub ponownie wykorzystać poprzednie, w zależności od konfiguracji) zamiast przerywać wykonywanie z błędem...

aktualizacja :wyjaśnienie dlaczego to proponuję

z dokumentów

Więc jeśli masz więcej wątków, postgres max_connections , pojawia się wspomniany błąd. Każdy wątek może ponownie użyć połączenia, jeśli CONN_MAX_AGE nie przeszło. Twoje ustawienie to 0, więc połączenie powinno zostać zamknięte po zakończeniu zapytania, ale widzisz 100 bezczynnych połączeń. Więc się nie zamykają. Duża liczba połączeń oznacza, że ​​nie są one również ponownie wykorzystywane (logika:gdybyś miał 100 równoległych zapytań, nie wszystkie byłyby bezczynne, a jeśli masz ich tak wiele, nie są ponownie wykorzystywane - otwierają nowe). Więc myślę, że django nie zamyka ich zgodnie z obietnicą - więc CONN_MAX_AGE ustawione na 0 nie działa w twoim kodzie. Proponuję więc użyć db.close_connection() wymuszenie rozłączenia i ustawienie CONN_MAX_AGE na niewielką wartość może zmienić zachowanie.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak utworzyć postgres do Oracle dblink?

  2. PostgreSql:uzyskiwanie dziwnie sformatowanego znacznika czasu ze strefą czasową

  3. Wybór z Bazy Danych na podstawie listy unikalnych par

  4. Dlaczego Rails / ActiveRecord podaje stałą Postgres SyntaxError niecałkowitą w ORDER?

  5. Jak zresetować sekwencję klawiszy podstawowych Postgres, gdy nie będzie ona zsynchronizowana?