понедельник, 11 июля 2011 г.

Использование pgbouncer для пуллинга соединений к PostgreSQL

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

Чаще всего используется так называемый пул соединений к базе данных, который играет роль прослойки между клиентами и сервером, поддерживая с последним определенное количество постоянных соединений. Наиболее популярным решением является pgbouncer (есть в портах).
Рассмотрим его конфигурационный файл, который напоминает конфиг mysql, поскольку состоит из секций.
Секция [databases]
Она состоит из записей вида: имя базы = строка соединения. Например:
bardb = host=127.0.0.1 dbname=bazdb
Тут можно указать различные параметры для разных баз, что может быть полезно например при переносе с одного сервера на другой.
 Секция конфигурации [pgbouncer]
Путь к pid файлу и логу:
logfile = /var/log/pgbouncer/pgbouncer.log
pidfile = /var/run/pgbouncer/pgbouncer.pid
Параметры сервера:
listen_addr = *
listen_port = 6432
unix_socket_dir = /tmp
 Авторизация:
auth_type = trust
auth_file = /usr/local/etc/userslist.txt
Режим пуллинга (одно из session, transaction, statement в порядке повышения агрессивности):

pool_mode = session
Размер пула:

max_client_conn = 500
default_pool_size = 50
max_client_conn - максимальное количество клиентов, которые могут подключится к пулу
default_pool_size - максимальное количество подключений к одной базе от одного пользователя
Эти значения должны быть соотнесены с количеством соединений в конфиге PostgreSQL.
Логирование:

log_connections = 0
log_disconnections = 0
У pgboubcer есть интерфейс администрирования, доступный при подключении к псевдо-базе pgbouncer.

Официальная документация 

Комментариев нет:

Отправить комментарий