2016-08-22 6 views
2

Я хочу ограничить количество пользователей на каждую базу данных в среде с несколькими арендаторами. Но есть три уровня максимальных соединений, и я должен быть благодарен за любые советы.Где определить максимальное количество соединений в Postgres?

Уровень 1 Весь сервер

При редактировании конфигурации для Postgresql я могу установить соединение Max для всех баз данных на сервере

postgresql.conf = max_connections = 100 

Уровень 2 в базе данных

Я могу выбрать и установить ограничение доступа к базе данных для каждой базы данных:

SELECT datconnlimit FROM pg_database 

Уровень 3 За роль

можно выбрать и установить ограничение роли соединения на "пользователь":

SELECT rolconnlimit FROM pg_roles 

Мои вопросы

  1. Если max_connections в postgresql.conf равно 100, будет ли максимальное соединение всех баз данных независимо от настроек базы данных и роли? У меня 100 баз данных могут иметь только 1 соединение одновременно?

  2. Где лучше всего ограничивать максимальные соединения. На уровне базы данных или на уровне ролей?

  3. Что-нибудь еще нужно учитывать?

TIA для любых советов или подсказок!

+1

1) ясно [из документации] (https://www.postgresql.org/docs/current/static/runtime-config-connection.html#GUC-MAX-CONNECTIONS) (абсолютный предел весь сервер). А остальное зависит от вашего варианта использования. – dhke

+0

dhke: «И все остальное зависит от вашего прецедента». Зависит от чего? Любой намек? – sibert

+0

Есть ли на самом деле несколько пользователей БД? (например, большое веб-приложение с одним пользователем БД). У вас есть несколько баз данных? Используются ли эти базы данных разными пользователями? В общем случае с одним пользователем, одиночная БД, 'max_connections',' datconnlimit' и 'rolconnlimit' - все те же, что и самый низкий. – dhke

ответ

1
  1. max_connections минус superuser_reserved_connections является максимальным для суммы всех непривилигированных соединений для всех баз данных в кластере.

  2. Если вы хотите ограничить количество пользователей в базе данных, задание предела в базе данных кажется очевидным выбором, не так ли?

  3. Если вы в конечном итоге установили max_connections на высокое значение, попробуйте вместо этого использовать пул соединений.

+0

«Если вы хотите ограничить количество пользователей в базе данных, установка предела в базе данных кажется очевидным выбором, верно?» Таким образом, роль 'rolconnlimit' должна быть установлена ​​выше или -1, чем' datconnlimit' для обеспечения доступа? – sibert

+1

Если вы не хотите ограничивать количество подключений для каждого пользователя, оставьте 'rolconnlimit' на' -1'. –