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

Żądania utknęły w PG::Connection#async_exec

Problem został rozwiązany po rozpoczęciu ponownego nawiązywania połączeń z bazą danych. Używaliśmy sequel w projekcie, a Pasażer sam zajmuje się tym problemem tylko wtedy, gdy używany jest ActiveRecord.

Aby to rozwinąć, domyślnie pasażer używa inteligentnego spawnowania dla aplikacji rubinowych. Najpierw uruchamia proces preloadera, który ładuje framework i wszystkie biblioteki. Po tym procesie wstępnego ładowania, gdy zajdzie taka potrzeba, odradzają się procesy robocze, które obsługują żądania. Podczas tworzenia procesów roboczych wszystkie deskryptory plików są dziedziczone z procesu wstępnego ładowania. Jeśli więc nie nawiążesz ponownie połączenia z bazą danych, wszystkie procesy robocze współdzielą jedno, ustanowione przez preloader. Co prowadzi do różnego rodzaju dziwnych zachowań. Lubię żądania, które trwają zbyt długo.

Wcześniej przenieśliśmy również obsługę połączeń WebSocket do osobnego procesu. Nie jestem jednak pewien, czy przyczyniło się to do problemu.

Więcej na ten temat tutaj:

Odłącz, jeśli używasz serwera Forking Webserver ze wstępnym ładowaniem kodu
Niezamierzone udostępnianie deskryptorów plików
Uruchamianie serwera Action Cable na tym samym hoście i porcie, pod sub-URI




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Konwertuj CamelCase na snake_case

  2. BŁĄD PostgreSQL:funkcja to_tsvector (znak zmienny, nieznany) nie istnieje

  3. Zapytanie Postgresql 9.4 staje się coraz wolniejsze podczas dołączania do TSTZRANGE za pomocą &&

  4. Zaktualizuj wartość klucza w tablicy obiektów jsonb

  5. Przeszukuj wiele tabel, a także wyświetlaj nazwę tabeli w wynikowych wierszach