PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Има ли изчакване за неактивни PostgreSQL връзки?

Изглежда, че имате изтичане на връзка във вашето приложение, защото не успява да затвори обединени връзки . Нямате проблеми само с <idle> in transaction сесии, но като цяло с твърде много връзки.

Прекъсването на връзки не е правилният отговор за това, но това е временно решение.

Вместо да рестартирате PostgreSQL, за да стартирате всички други връзки от база данни на PostgreSQL, вижте:Как да отделя всички други потребители от база данни на Postgres? и Как да махна PostgreSQL база данни, ако има активни връзки към нея? . Последният показва по-добра заявка.

За задаване на изчакване, както предложи @Doon, вижте Как автоматично да затваряте неактивни връзки в PostgreSQL?, което ви съветва да използвате PgBouncer за прокси за PostgreSQL и да управлявате неактивни връзки. Това е много добра идея, ако имате бъгаво приложение, което така или иначе пропуска връзки; Аз много силно препоръчваме да конфигурирате PgBouncer.

TCP keepalive няма да свърши работа тук, защото приложението все още е свързано и живо, просто не трябва да бъде.

В PostgreSQL 9.2 и по-нова версия, можете да използвате новия state_change колоната с времеви печат и state поле на pg_stat_activity за внедряване на жътва на празен ход. Накарайте cron задача да изпълни нещо подобно:

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;

В по-старите версии трябва да внедрите сложни схеми, които следят кога връзката е останала неактивна. Не се притеснявай; просто използвайте pgbouncer.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Връщане на редове от INSERT с ON CONFLICT без необходимост от актуализиране

  2. Конкатениране/сливане на стойности на масива по време на групиране/агрегиране

  3. Развързване на масива с едно ниво

  4. Потребителят на Postgres не съществува?

  5. SQL LIKE условие за проверка за цяло число?