postgresql connection pool что это

Записки программиста

Настраиваем пул соединений к PostgreSQL с PgBouncer

Типичные веб-проекты, разрабатываемые на чем-то вроде Python или PHP, характерны тем, что создают большое количество соединений к СУБД — по одному, а иногда и по несколько, на каждый HTTP-запрос. Имея классическую архитектуру «один процесс на соединение», PostgreSQL не очень хорошо справляется с большим (условно, больше 100) количеством соединений. Решить проблему позволяет пулер соединений под названием PgBouncer. Благодаря использованию библиотеки libevent, PgBouncer может поддерживать большое количество (тысячи) соединений, которые проксируются на несколько (пара десятков) соединений непосредственно к PostgreSQL.

Данная заметка предполагает, что на сервере у вас используется Ubuntu Linux, так как сегодня это, по всей видимости, наиболее популярный серверный дистрибутив Linux. Отличия описанный далее шагов для других дистрибутивов будут минимальными. Также предполагается, что на сервере уже установлен PostgreSQL. Установка и начальная настройка PostgreSQL ранее подробно рассматривались в статье Начало работы с PostgreSQL.

Устанавливается PgBouncer очень просто:

По умолчанию прокси слушает порт 6432. Логи можно почитать так:

Конфигурационный файл называется /etc/pgbouncer/pgbouncer.ini. Рассмотрим основные параметры.

;; database name = connect string
;;
;; connect string params:
;; dbname= host= port= user= password=
;; client_encoding= datestyle= timezone=
;; pool_size= connect_query=
;; auth_user=
[databases]

Здесь мы можем указать, на каких серверах какие базы нужно искать. Звездочкой обозначается дэфолтный сервер. Кстати, это хоть еще и примитивный, но все-таки уже шардинг.

Не менее важная настройка:

По умолчанию стоит в session, то есть, сессия будет удерживаться клиентом до тех пор, пока он не закроет соединение. Чаще всего значение имеет смысл заменить на transaction. В этом случае соединение будет возвращаться в общий пул после завершения транзакции. Значение statement означает, что соединение будет освобождаться после выполнения каждого отдельного выражения, чего вы почти наверняка не должны хотеть.

Настройки размера пула:

; total number of clients that can connect
max_client_conn = 1000

; default pool size. 20 is good number when transaction pooling
; is in use, in session pooling it needs to be the number of
; max clients you want to handle at any moment
default_pool_size = 20

;; Minimum number of server connections to keep in pool.
;min_pool_size = 0

Здесь я увеличил максимальное количество клиентских соединений до 1000. Значение, используемое по умолчанию, равно 100.

… и доступа к админке pgbouncer:

;;;
;;; Users allowed into database ‘pgbouncer’
;;;

; comma-separated list of users, who are allowed to change settings
admin_users = eax

; comma-separated list of users who are just allowed to use
; SHOW command
;stats_users = stats, root

Важно! Параметр auth_type по умолчанию имеет значение trust. То есть, PgBouncer будет пускать всех в базу данных без запроса пароля. Вы почти наверняка этого не хотите.

Файл /etc/pgbouncer/userlist.txt содержит имена пользователей и пароли, с которыми PgBouncer подключается к базе. Например:

Пароли не обязательно хранить открытым текстом:

Здесь хэш 175c641e. был посчитан как MD5 от пароля, следом за которым записано имя пользователя:

Теперь, когда PgBouncer настроен, можно перезапустить его:

Если все было сделано правильно, PgBouncer запросит пароль. В приведенном примере пароль, с которым пользователь ходит в PostgreSQL напрямую, и пароль, запрашиваемый PgBouncer — это один и тот же пароль. Если вдруг что-то не работает, рекомендую начать с проверки настройки аутентификации самого PostgreSQL (файл pg_hba.conf).

Выше пользователь eax был добавлен в admin_users, что дает ему доступ в админку PgBouncer. Вход в админку осуществляется так:

Наиболее интересная из доступных команд — это перечитывание конфигурации без перезапуска сервера:

Информацию о других доступных командах можно посмотреть так:

Проверяем, что все работает, запустив pgbench с 900 соединенинями:

Как видите, пользоваться PgBouncer легко и приятно. А вы боялись!

Источник

Пулы соединений к БД — зачем и почему

Теория

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

В настоящее время большинство драйверов для работы с БД поддерживают работу с пулами соединений. Однако всегда есть соблазн написать свою реализацию, которая будет работать быстрее. Давайте проверим сколько мы выиграем используя пулы соединений и кеширование, как в коробочном решении так и в самописном.

Способ измерения

Для тестов используем свободно распространяемую СУБД PostgreSQL, а клиент напишем на JAVA. В БД создадим небольшую таблицу test.test_table (около 10 строк), состоящую из первичного ключа id и строкового значения value. Пусть у нас клиенты параллельно выполняют запросы к БД, для этого создадим потоки, которые будут делать простые запросы поиска по первичному ключу в этой таблице. При создании потоков мы будем указывать различную реализацию пулов соединений, что позволит нам сравнить производительность, т.к. поток будет считать суммарное время потраченное им на выполнение 100 запросов.

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

Вторым будет, использующий специальный кеширующий источник данных класс из JDBC драйвера к PostgreSQL — PGPoolingDataSource. Который позволяет задать размер пула соединений, а так же начальное количество соединений. Кроме того в настройках у PreparedStatement есть настройка setPrepareThreshold — отвечающая за количество выполнений запроса, после которого запрос кешируется и не требует парсинга и построения плана выполнения.

Ну и в конце нашу реализацию пулов, когда мы сами кешируем соединения к БД а также результаты разбора SQL запроса (PreparedStatement).

Так же придётся реализовать свой класс соединения с БД, который будет осуществлять кеширование PreparedStatement.

Плюс свой класс реализующей интерфейс PreparedStatement, и не реагирующий на закрытие

Заключение

Ну и наконец сравним производительность трех различных пулов соединений, запустим тесты с количеством параллельных потоков от 1 до 10, для различных реализаций. В результате получился следующая зависимость общего времени выполнения задачи от количества потоков.

postgresql connection pool что это. Смотреть фото postgresql connection pool что это. Смотреть картинку postgresql connection pool что это. Картинка про postgresql connection pool что это. Фото postgresql connection pool что это

Из графика видно, что кешировать соединения с БД явно нужно, это даёт значительный прирост производительности системы. А вот писать самописную реализацию кеширования соединений и PreparedStatement не даёт ощутимой выгоды.

Источник

Postgresql connection pool что это

pgbouncer — пул соединений Postgres Pro

Синтаксис

pgbouncer [-d] [-R] [-v] [-u пользователь ] pgbouncer.ini

В системах Windows:

pgbouncer [-v] [-u пользователь ] pgbouncer.ini

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

Описание

Чтобы не нарушать семантику транзакций при переключении подключений, pgbouncer поддерживает несколько видов пулов:

Наиболее корректный метод. Когда клиент подключается, ему назначается одно серверное подключение на всё время, пока клиент остаётся подключённым. Когда клиент отключается, это подключение к серверу возвращается в пул. Этот метод работает по умолчанию. Пул транзакций

Подключение к серверу назначается клиенту только на время транзакции. Когда pgbouncer замечает, что транзакция завершена, это подключение возвращается в пул. Пул операторов

Наиболее агрессивный метод. Подключение к серверу будет возвращаться в пул сразу после завершения каждого запроса. Транзакции с несколькими операторами в этом режиме запрещаются, так как они не будут работать.

Быстрый запуск

Базовая настройка и использование демонстрируются ниже.

Создайте файл userlist.txt со списком пользователей, которым разрешено подключение:

Примечание

Эта команда не работает в системах Windows. Вместо этого pgbouncer должен запускаться в виде службы, которую необходимо сначала зарегистрировать следующим образом:

Параметры

Запустить в фоновом режиме. Без этого указания процесс будет работать на переднем плане.

Примечание

Это не работает в Windows, там pgbouncer нужно запускать в виде службы.

Выполнить перезапуск на «лету». При этом pgbouncer подключается к работающему процессу, забирает у него открытые сокеты и начинает использовать их. Если активного процесса нет, он запускается в обычном режиме.

Примечание

Win32: Разрегистрировать службу Windows.

Административная консоль

Эта консоль доступна при обычном подключении к базе pgbouncer :

Кроме того, пользователю pgbouncer разрешено подключение без пароля, если это подключение устанавливается через сокет Unix и у клиента тот же uid пользователя Unix, что и у работающего процесса.

Команды вывода информации

Команды SHOW выводят полезную информацию. Каждая команда описана ниже.

SHOW STATS

База данных, для которой представлена статистика. total_xact_count

Время, в течение которого клиенты ожидали ответов сервера (в микросекундах). avg_xact_count

Среднее число транзакций в секунду за последний период статистики. avg_query_count

Среднее число запросов в секунду за последний период статистики. avg_recv

Средняя скорость получения данных от клиентов (байт в секунду). avg_sent

Средняя скорость передачи данных клиентам (байт в секунду). avg_xact_time

Средняя длительность транзакции (в микросекундах). avg_query_time

Средняя длительность запроса (в микросекундах). avg_wait_time

Среднее время ожидания ответов сервера в течение секунды (в микросекундах).

SHOW STATS_TOTALS

SHOW STATS_AVERAGES

SHOW TOTALS

SHOW SERVERS

«S» для серверов user

Имя пользователя, с которым pgbouncer подключается к серверу. database

Имя базы данных. state

Исходный адрес подключения на локальной машине. local_port

Исходный порт подключения на локальной машине. connect_time

Время установления подключения. request_time

Время выдачи последнего запроса. wait

Текущая длительность ожидания (в секундах). wait_us

Дробная часть текущей длительности ожидания (в микросекундах). close_needed

1, если соединение будет закрыто при ближайшей возможности в связи с выполнением команды RECONNECT либо в связи с изменением параметров соединения, вызванным перезагрузкой файла конфигурации или изменениями в DNS. ptr

Адрес внутреннего объекта для данного подключения. Используется как уникальный идентификатор. link

Адрес клиентского подключения, с которым связан сервер. remote_pid

Информация о TLS-подключении; пустая строка, если TLS не используется.

SHOW CLIENTS

«C» для клиентов. user

Пользователь, подключённый со стороны клиента. database

Имя базы данных. state

IP-адрес клиента. port

Порт, к которому подключён клиент. local_addr

Конечный адрес подключения на локальной машине. local_port

Конечный порт подключения на локальной машине. connect_time

Время установления подключения. request_time

Время последнего запроса клиента. wait

Текущая длительность ожидания (в секундах). wait_us

Дробная часть текущей длительности ожидания (в микросекундах). close_needed

Не используется для клиентов. ptr

Адрес внутреннего объекта для данного подключения. Используется как уникальный идентификатор. link

Адрес серверного подключения, с которым связан клиент. remote_pid

Идентификатор процесса (PID), в случае, если клиент подключается через сокет UNIX и ОС может выдать этот идентификатор. tls

Информация о TLS-подключении; пустая строка, если TLS не используется.

SHOW POOLS

Новый пул создаётся для каждой пары сущностей (база данных, пользователь).

Имя базы данных. user

Имя пользователя. cl_active

Число клиентских подключений, которые связаны с подключениями к серверу и могут обрабатывать запросы. cl_waiting

Число клиентских подключений, которые отправили запросы, но ещё не получили подключения к серверу. sv_active

Число серверных подключений, связанных с клиентами. sv_idle

Число серверных подключений, которые не используются и могут немедленно задействоваться для запросов клиентов. sv_used

Число серверных подключений, через которые в данный момент выполняется вход на сервер. maxwait

Показывает, как долго ожидает в очереди самый первый клиент (в секундах). Если это число начинает увеличиваться, значит текущий пул серверов не справляется с запросами достаточно быстро. Причиной тому может быть перегруженный сервер, либо просто слишком маленький размер пула (параметр pool_size ). maxwait_us

Дробная часть максимального времени ожидания (в микросекундах). pool_mode

Действующий режим пула.

SHOW LISTS

Показывает следующие внутренние сведения, в столбцах (не строках):

Число баз данных. users

Число пользователей. pools

Число пулов. free_clients

Число свободных клиентов. used_clients

Число активных клиентов. login_clients

Число клиентов в состоянии входа ( login ). free_servers

Число свободных серверов. used_servers

Число задействованных серверов. dns_names

Количество имён DNS в кеше. dns_zones

Количество зон DNS в кеше. dns_queries

Количество выполняющихся запросов к DNS. dns_pending

SHOW USERS

Имя пользователя. pool_mode

SHOW DATABASES

Имя настроенной записи базы данных. host

Когда пользователь указан в строке соединения, подключение между pgbouncer и Postgres Pro должно устанавливаться от его имени, вне зависимости от пользователя на стороне клиента. pool_size

Максимальное число серверных подключений. reserve_pool

Максимальное число дополнительных подключений для этой базы данных. pool_mode

Текущее число подключений для этой базы. paused

1, если база данных находится в состоянии паузы, иначе — 0. disabled

1, если база данных находится в отключённом состоянии, иначе — 0.

SHOW FDS

Внутренняя команда, которая показывает список файловых дескрипторов и их внутреннее состояние.

Примечание

В Windows это не работает.

Эта команда также блокирует внутренний цикл событий, так что её не следует выполнять, когда pgbouncer используется.

Числовое значение файлового дескриптора (ФД ). task

Ключ отмены для данного подключения. link

SHOW SOCKETS, SHOW ACTIVE_SOCKETS

SHOW CONFIG

Выводит текущие параметры конфигурации, по одному в строке со следующими столбцами:

Имя переменной конфигурации. value

Значение переменной конфигурации. changeable

SHOW MEM

Выводит низкоуровневую информацию о размере различных блоков памяти, выделенных для внутреннего использования. Эта информация имеет динамическую природу и может меняться.

SHOW DNS_HOSTS

Сколько секунд остаётся до очередного внешнего поиска. addrs

Список адресов, разделённых запятыми.

SHOW DNS_ZONES

Текущий серийный номер. count

Имена узлов, относящихся к этой зоне.

Команды управления процессом

PAUSE [ бд ]

pgbouncer пытается отключиться ото всех серверов, сначала ожидая завершения всех запросов. Выполнение этой команды заканчивается, только когда завершаются все запросы. Эта команда должна применяться во время перезапуска базы данных.

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

DISABLE бд

Запрещает любые новые подключения клиентов к указанной базе данных.

ENABLE бд

RECONNECT бд

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

Эта команда может быть полезна, когда изменяется конфигурация подключения к серверу, например, нужно постепенно переключиться на новый сервер. Эту команду не нужно выполнять, если вы меняете строку соединения в pgbouncer.ini и перезагружаете конфигурацию (см. RELOAD ) или когда меняются адреса в DNS, так как равнозначное действие будет выполнено автоматически. Эта команда может быть полезна, только если подключения pgbouncer маршрутизируются какими-то внешними средствами.

KILL бд

Немедленно закрывает все клиентские и серверные подключения к указанной базе данных, деактивируя её.

SUSPEND

Все буферы сокетов очищаются и pgbouncer прекращает принимать данные через них. Выполнение этой команды заканчивается, только когда все буферы будут очищены. Эта команда должна применяться, когда pgbouncer перезагружается «на лету».

RESUME [ бд ]

SHUTDOWN

RELOAD

Указывает процессу pgbouncer перезагрузить файл конфигурации и обновить значения изменяемых параметров.

PgBouncer отслеживает изменения в файле конфигурации, затрагивающие подключения к базе данных. Существующие подключения со старыми параметрами будут закрыты при ближайшем освобождении этих подключений (в соответствии с режимом пула), а новые подключения к серверу немедленно начнут использовать изменившиеся параметры соединения.

WAIT_CLOSE [ бд ]

Другие команды

SET ключ = аргумент

Изменяет параметр конфигурации (см. также Подраздел «SHOW CONFIG»). Например:

Сигналы

Перезагрузка конфигурации. Равносильно выполнению команды RELOAD в консоли. SIGINT

Безопасное отключение. Равносильно выполнению команд PAUSE и SHUTDOWN в консоли. SIGTERM

Немедленное отключение. Равносильно выполнению команды SHUTDOWN в консоли. SIGUSR1

Равносильно выполнению команды PAUSE в консоли. SIGUSR2

Равносильно выполнению команды PAUSE в консоли.

Параметры libevent

Из документации libevent:

Файл конфигурации pgbouncer.ini

Общие параметры

По умолчанию: не задано. pidfile

Указывает имя файла PID. Без этого указания работа в режиме демона не допускается.

По умолчанию: не задано. listen_addr

Адреса могут задаваться числами (в формате IPv4/IPv6) или именами.

По умолчанию: не задано. listen_port

Номер принимающего порта. Задаётся и для сокетов TCP, и для Unix-сокетов.

По умолчанию: 6432 unix_socket_dir

Указывает расположение сокетов Unix. Действует и для принимающего сокета, и для подключений к серверу. Если задана пустая строка, сокеты Unix отключаются. Требуется для выполнения перезагрузки «на лету» (-R). Замечание: не поддерживается в Windows.

По умолчанию: /tmp unix_socket_mode

Режим файловой системы для сокета Unix.

По умолчанию: 0777 unix_socket_group

Имя группы для сокета Unix.

По умолчанию: не задано. user

Если задан, определяет, на какого пользователя Unix нужно переключиться после запуска. Работает, только если pgbouncer запускается от имени root или уже запущен от имени заданного пользователя.

Замечание: Не поддерживается в Windows.

По умолчанию: не задано. auth_file

Имя файла, из которого будут загружаться имена и пароли пользователей. За подробностями обратитесь к Подразделу «Формат файла аутентификации».

По умолчанию: не задано. auth_hba_file

По умолчанию: не задано. auth_type

Определяет, как аутентифицировать пользователей.

Применять проверку пароля по алгоритму SCRAM-SHA-256. Заданный параметром auth_file файл должен содержать зашифрованные SCRAM или открытые пароли. Учтите, что зашифрованные SCRAM пароли могут использоваться только для проверки пароли клиентов, но не для входа на сервер. Чтобы использовать SCRAM для серверных подключений, пароли необходимо задать открытым текстом. plain

По каналу передаётся пароль в открытом тексте. Устаревший вариант. trust

Запрос для извлечения пароля пользователя из базы данных.

Для прямого доступа к pg_shadow требуются права администратора. Поэтому рекомендуется, чтобы обычный пользователь обращался к ней, вызывая функцию SECURITY DEFINER (с контекстом безопасности определившего).

Заметьте, что этот запрос выполняется в целевой базе данных, так что если в нём используются функции, они должны быть установлены в каждой базе.

По умолчанию: SELECT usename, passwd FROM pg_shadow WHERE usename=$1 auth_user

Для прямого доступа к pg_shadow требуются права администратора. Поэтому рекомендуется, чтобы обычный пользователь обращался к ней, вызывая функцию SECURITY DEFINER (с контекстом безопасности определившего).

По умолчанию: не задано. pool_mode

Указывает, когда подключение к серверу могут повторно использовать другие клиенты.

Сервер возвращается в пул после отключения клиента. Это вариант по умолчанию. transaction

Сервер возвращается в пул после завершения транзакции. statement

Сервер возвращается в пул после завершения запроса. В этом режиме не допускаются длинные транзакции, охватывающие несколько операторов.

Если пользователь задан в строке соединения (все пользователи подключаются под одним именем), теоретический максимум равен:

Теоретический максимум не должен достигаться никогда, если только кто-то намеренно не предпримет специальные меры для этого. Тем не менее это значит, что число файловых дескрипторов должно ограничиваться довольно большим числом.

Поищите ulimit в руководстве man в вашей системе. Замечание: ограничение ulimit неприменимо в среде Windows.

По умолчанию: 100 default_pool_size

Сколько подключений к серверу возможно для пары пользователь/база. Может быть переопределено в конфигурации базы данных.

По умолчанию: 20 min_pool_size

Добавить в пул дополнительные соединения, если число активных подключений меньше этого числа. Даёт положительный эффект, когда нагрузка появляется внезапно после периода простоя.

По умолчанию: 0 (отключено) reserve_pool_size

Число дополнительно разрешённых подключений в пуле. При 0 резерв отсутствует.

По умолчанию: 0 (отключено) reserve_pool_timeout

Если клиент не обслуживается заданное число секунд, pgbouncer задействует дополнительные подключения из резервного пула. При 0 это не происходит.

По умолчанию: 5.0 max_db_connections

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

По умолчанию: нет ограничения max_user_connections

Не допускать больше заданного числа подключений пользователя (вне зависимости от пула, то есть пользователя). Следует заметить, что когда предел достигается, закрытие подключения клиента в одном пуле не позволяет немедленно установить другое подключение к серверу через другой пул, так как подключение первого пула по-прежнему открыто. Когда сервер закроет его (по тайм-ауту неактивности), новое подключение будет немедленно установлено для ожидающего пула. server_round_robin

По умолчанию: 0 ignore_startup_parameters

Все другие параметры вызывают ошибку. Чтобы принимались и другие параметры, их нужно указать здесь, чтобы pgbouncer знал, что они обрабатываются администратором и их можно игнорировать.

По умолчанию: пустая строка disable_pqexec

Отключает протокол простых запросов (PQexec). В отличие от протокола расширенных запросов, этот протокол допускает указание нескольких запросов в одном пакете, что оставляет место для атак с SQL-инъекцией. Отключение этого протокола может улучшить безопасность. Разумеется, это означает, что при этом смогут работать только клиенты, которые используют исключительно протокол расширенных запросов.

По умолчанию: 0 application_name_add_host

По умолчанию: 0 conffile

По умолчанию: файл, заданный в командной строке. service_name

Используется при регистрации службы win32.

По умолчанию: pgbouncer job_name

Параметры журнала

По умолчанию: 0 syslog_ident

По умолчанию: pgbouncer (имя программы) syslog_facility

По умолчанию: daemon log_connections

Фиксировать в журнале успешные подключения.

По умолчанию: 1 log_disconnections

Фиксировать отключения с указаниями их причин.

По умолчанию: 1 log_pooler_errors

Фиксировать сообщения об ошибках, которые pgbouncer передаёт клиентам.

По умолчанию: 1 stats_period

Интервал для записи накопленной статистики в журнал.

По умолчанию: 60 log_stats

По умолчанию: 1 verbose

Управление доступом к консоли

По умолчанию: пустая строка stats_users

Разделённый запятыми список пользователей баз данных, которым разрешено подключаться к консоли и выполнять команды только на чтение. Это включает все команды SHOW, за исключением SHOW FDS.

По умолчанию: не задан.

Проверки активности соединений, тайм-ауты

Когда применяется пул транзакций, server_reset_query не действует, так как клиенты не должны использовать никакие свойства сеансов, потому что каждая транзакция завершается в отдельном соединении и таким образом получает разные состояния сеанса.

По умолчанию: DISCARD ALL server_reset_query_always

Определяет, должен ли запрос server_reset_query выполняться во всех режимах пула. Когда этот параметр отключён (по умолчанию), server_reset_query будет запускаться только в режиме пула сеансов. Соединениям в режиме пула транзакций не должен требоваться запрос сброса состояния.

По умолчанию: 0 server_check_delay

Определяет, как долго должны сохраняться освобождаемые подключения в состоянии готовности к повторному использованию, без запуска запроса проверки подключения. При значении 0 этот запрос запускается всегда.

По умолчанию: 30.0 server_check_query

Простой холостой запрос, проверяющий, сохраняется ли подключение к серверу.

Если это пустая строка, проверка соединения отключается.

По умолчанию: SELECT 1; server_fast_close

Определяет, должен ли сервер в режиме пула сеансов отключаться немедленно либо после завершения текущей транзакции, если он находится в режиме close_needed (который включается командами RECONNECT и RELOAD или при изменениях в DNS), или необходимо дожидаться завершения сеанса. Режимы пула запросов и транзакций так и работают, поэтому включение этого параметра на эти режимы не влияет.

Если этот параметр включён, то есть подключение к серверу закрывается до завершения сеанса клиента, клиентское подключение также закрывается. Тем самым гарантируется, что прерывание сеанса не останется незамеченным для клиента.

Этот параметр позволяет ускорить вступление в силу изменений параметров соединений в случае использования пула сеансов и существования долгоживущих сеансов. Недостатком его использования может быть то, что клиентские сеансы могут прерываться при изменении конфигурации, так что клиентские приложения должны уметь переподключаться и восстанавливать состояние сеанса. Но заметьте, что никакие транзакции при этом не будут потеряны, так как прерываться будут не выполняющиеся транзакции, а только лишь простаивающие сеансы.

По умолчанию: 0 server_lifetime

pgbouncer будет закрывать неиспользуемое серверное подключение, существующее дольше заданного времени (в секундах). Ноль означает, что соединение будет использоваться только один раз, а затем будет закрываться.

По умолчанию: 3600.0 server_idle_timeout

Если подключение к серверу простаивает дольше заданного времени (в секундах), оно будет сброшено. При значении 0 тайм-аут отключается.

По умолчанию: 600.0 server_connect_timeout

Если инициализация подключения и вход на сервер не завершается за указанное время (в секундах), соединение будет закрыто.

По умолчанию: 15.0 server_login_retry

При ошибке входа на сервер, из-за сбоя в connect() или при аутентификации, pgbouncer будет ждать заданное время (в секундах).

По умолчанию: 15.0 client_login_timeout

Если клиент подключается, но не может пройти аутентификацию за указанное время (в секундах), он будет отключён. Требуется в основном, чтобы «мёртвые» подключения не задерживали операцию SUSPEND и, как следствие, перезагрузку на лету.

По умолчанию: 60.0 autodb_idle_timeout

Если создаваемые автоматически (через «*») пулы баз данных не используются заданное время (в секундах), они освобождаются. Минусом этого является то, что их статистика также сбрасывается.

По умолчанию: 3600.0 dns_max_ttl

Время кеширования результатов поиска в DNS (в секундах). Если при поиске в DNS возвращаются разные ответы, pgbouncer будет использовать их по очереди. Действительное значение DNS TTL игнорируется.

По умолчанию: 15.0 dns_nxdomain_ttl

Время кеширования ошибок DNS и результатов NXDOMAIN (в секундах).

По умолчанию: 15.0 dns_zone_check_period

Интервал проверки серийного номера зоны.

По умолчанию: 0.0 (отключено)

Параметры TLS

По умолчанию: не задано. client_tls_cert_file

Сертификат частного ключа. Клиенты могут проверить его.

По умолчанию: не задано. client_tls_ca_file

Файл с корневым сертификатом, по которому будут проверяться клиентские сертификаты.

По умолчанию: не установлен. client_tls_protocols

По умолчанию: all client_tls_ciphers

По умолчанию: fast client_tls_ecdhcurve

Имя эллиптической кривой, применяемой при обмене ключами ECDH.

Допустимые значения: none (DH отключён), auto (256-битный ECDH), имя кривой.

По умолчанию: auto client_tls_dheparams

Тип обмена ключами DHE.

Допустимые значения: none (DH отключён), auto (2048-битный DH), legacy (1024-битный DH).

По умолчанию: auto server_tls_sslmode

По умолчанию: не установлен. server_tls_key_file

По умолчанию: не задано. server_tls_cert_file

Сертификат закрытого ключа. Сервер Postgres Pro может проверять его.

По умолчанию: не задано. server_tls_protocols

По умолчанию: all server_tls_ciphers

Опасные тайм-ауты

Установка следующих тайм-аутов может приводить к неожиданным ошибкам.

Запросы, выполняющиеся дольше этого времени (в секундах), будут отменяться. Его значение следует выбирать лишь немногим меньшим параметра statement_timeout на сервере, чтобы это происходило только при проблемах в сети.

По умолчанию: 0.0 (отключено) query_wait_timeout

Максимальное время, которое могут ожидать выполнения запросы (в секундах). Если запрос не назначается серверу за это время, клиент отключается. Это применяется для предотвращения захватывания подключений «зависшими» серверами.

Это также помогает в ситуациях, когда сервер отключён или база данных не принимает подключения по какой-либо причине. Если этот тайм-аут отключить, клиенты будут стоять в очереди неограниченно долго.

По умолчанию: 120 client_idle_timeout

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

По умолчанию: 0.0 (отключено) idle_transaction_timeout

Если клиент «простаивает в транзакции» дольше этого времени (в секундах), он будет отключён.

По умолчанию: 0.0 (отключено)

Низкоуровневые параметры сети

По умолчанию: 4096 max_packet_size

По умолчанию: 2147483647 listen_backlog

Параметр очереди для listen(2). Определяет, сколько неотвеченных запросов на подключение будет находиться в очереди. Когда очередь заполнена, следующие новые подключения будут сбрасываться.

По умолчанию: 128 sbuf_loopcnt

Устанавливает, сколько циклов должны обрабатываться данные для одного подключения, после чего нужно переходить к другим. Без этого ограничения одно подключение с большим набором результатом может занять pgbouncer на долгое время. В одном цикле обрабатываются данные размером pkt_buf байт. Ноль убирает ограничение.

По умолчанию: 5 suspend_timeout

Сколько секунд ждать сброса буфера при выполнении SUSPEND или перезагрузки (-R). Если сброс не завершился, подключение сбрасывается.

По умолчанию: 10 tcp_defer_accept

По умолчанию: 45 в Linux, в других системах — 0 tcp_socket_buffer

По умолчанию: не задано. tcp_keepalive

Включает базовый опрос активности со стандартными параметрами ОС.

По умолчанию: 1 tcp_keepcnt

По умолчанию: не задано. tcp_keepidle

По умолчанию: не задано. tcp_keepintvl

По умолчанию: не задано.

Раздел [databases]

Имя базы данных может содержать символы _0-9A-Za-z без кавычек. Имена, содержащие другие символы, должны заключаться в двойные кавычки по правилам для идентификаторов SQL (две кавычки («») воспринимаются внутри строки как одна).

Имя целевой базы данных.

По умолчанию: имя базы данных на стороне клиента. host

По умолчанию: не задан, что подразумевает использование сокетов Unix. port

По умолчанию: 5432 user

В противном случае pgbouncer пытается подключиться к целевой базе данных с именем пользователя, переданным клиентом, что означает, что для каждого пользователя будет отдельный пул. password

Длина значения password ограничивается 160 символами.

Запрос, который будет выполняться сразу после установления соединения, но до того, как его смогут использовать какие-либо клиенты. Если при запросе возникают ошибки, они только фиксируются в журнале, другой реакции не следует. pool_mode

Задаёт режим пула для данной базы данных. Если этот параметр не задаётся, применяется значение pool_mode по умолчанию. max_db_connections

Задаёт максимум подключений для базы данных (то есть, используя все пулы этой базы данных, нельзя будет установить больше этого числа подключений к серверу). client_encoding

Запрашивает у сервера использование указанной клиентской кодировки ( client_encoding ). datestyle

Запрашивает у сервера использование указанного стиля даты ( datestyle ). timezone

Запрашивает у сервера использование указанного часового пояса ( timezone ).

Раздел [users]

Этот раздел содержит пары ключ=значение, где в качестве ключа принимается имя пользователя, а в качестве значения — переопределяемые для него параметры конфигурации в виде пар ключ=значение (в формате строк подключения libpq ). Таким образом переопределить можно лишь немногие параметры.

Задаёт режим пула для всех подключений данного пользователя. Если этот параметр не задаётся, применяется значение pool_mode по умолчанию или заданное для базы данных. max_user_connections

Задаёт максимум подключений для пользователя (то есть, используя все пулы, нельзя будет установить больше этого числа подключений к серверу).

Директива включения

Файл конфигурации pgbouncer может содержать директивы включения, которые указывают, что нужно прочитать и обработать дополнительный файл конфигурации. Это позволяет разделить файл конфигурации на физически отдельные части. Директивы включения выглядят примерно так:

Если файл задаётся не абсолютным путём, его путь воспринимается относительно текущего рабочего каталога.

Формат файла аутентификации

pgbouncer нуждается в собственной базе данных пользователей. Он загружает список пользователей из текстового файла в следующем формате:

В строке должно быть минимум два поля, заключённых в двойные кавычки. В первом поле задаётся имя пользователя, а во втором — пароль, либо открытым текстом, либо защищённый MD5 или SCRAM. Остальное содержимое строки pgbouncer игнорирует.

Принятый в Postgres Pro формат пароля, защищённого MD5:

Принятый в Postgres Pro формат пароля, защищённого SCRAM:

Формат файла HBA

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *