PostgreSQL ограничивает количество подключений значением меньше max_connections?

PostgreSQL ограничивает количество подключений значением меньше max_connections?

У меня есть сервер PostgreSQL 9.4, который, похоже, ограничивает количество подключений до меньшего значения, чем я определил в max_connections.

У меня max_connections установлен на 300.

SHOW max_connections;

max_connections
-----------------
300

Однако я обнаружил, что новые соединения начинают отключаться сразу после того, как количество активных соединений достигает 100, согласно измерениямSELECT count(*) from pg_stat_activity;

Пока это число меньше 100, новые соединения работают. Как только оно достигает 100, новые соединения прекращаются: PG::ConnectionBad: could not connect to server: Connection timed out(библиотека Ruby pg)

Похоже, что для подключений суперпользователей (т. е. для меня, подключающегося через PgAdmin) есть исключение, поскольку таким образом я могу превысить порог в 100, хотя приложения, не использующие суперпользователей, продолжают отключаться по тайм-ауту.

Я не могу точно определить, в чем может быть основная причина.

Некоторые настройки конфигурации:

max_connections = 300
superuser_reserved_connections = 2
shared_buffers = 1024MB
effective_cache_size = 2048MB
work_mem = 8MB
maintenance_work_mem = 256MB

Я попробовал немного повозиться с этими значениями, но безрезультатно.

Другие детали:

  • Ubuntu 14.04 64-бит
  • 4 ГБ линейного VPS
  • PostgreSQL 9.4.1
  • По сути, при той же конфигурации на PostgreSQL 9.2 такой проблемы не возникло.
  • Базы данных были перенесены из Postgres 9.2 через pg_dumpall
  • Использование памяти, похоже, не является проблемой, freeотображается 2,1 ГБ свободно, 3,5 ГБ, включая буферы/кэш.
  • Подключения предназначены для многих различных ролей ко многим различным базам данных, ни одна отдельная база данных не имеет более 5 или 6 активных подключений, и к каждой базе данных обращается ее собственная отдельная роль. Кажется, не нарушает никаких ограничений на подключение к отдельным базам данных или ролям.

решение1

Вы также увеличили максимальный размер сегмента ядра?

Пытаться:

sysctl -w kernel.shmmax=1258291200

решение2

Возможно ли, что вы ограничили максимальное количество подключений пользователей?Ролевые привилегии

Вы можете изменить это с помощью

ИЗМЕНИТЬ РОЛЬ имя_роли ПРЕДЕЛ ПОДКЛЮЧЕНИЯ 300;

Связанный контент