Использование PostgreSQL и pgBouncer с большим количеством клиентов

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

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

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

Установка:

  1. Для Windows можно скачать готовые бинарные модули pgBouncer - https://github.com/pgbouncer/pgbouncer/releases

  2. Для Linux ставится стандартно
    apt install pgbouncer
    .

Настройка userlist.txt:

  1. Создайте или отредактируйте файл userlist.txt в директории, где установлен pgBouncer.

  2. Добавьте строку в формате "username" "password", где указываете имя пользователя и пароль для PostgreSQL, например
    "prnwatch_user" "prnwatch_password"

Настройка pgbouncer.ini:

  1. Создайте или отредактируйте файл pgbouncer.ini в директории, где установлен pgBouncer:
    [databases]
    prnwatch_template = host=127.0.0.1 port=5432 dbname=PRNWATCH auth_user=prnwatch_user
    
    [pgbouncer]
    listen_port = 6432
    listen_addr = *
    auth_type = md5
    auth_file = d:\PGBouncer\userlist.txt
    logfile = d:\PGBouncer\pgbouncer.log
    pidfile = d:\PGBouncer\pgbouncer.pid
    admin_users = prnwatch_user
    pool_mode = transaction
    default_pool_size = 100
    max_client_conn = 10000

Раздел [databases]:

Раздел [pgbouncer]:

Регистрация pgBouncer как сервис:

  1. Windows в командной строке под администратором
    pgbouncer --regservice pgbouncer.ini
    После этого запускаем сервис pgBouncer.

  2. Linux
    pgbouncer -d pgbouncer.ini

На каждом клиенте O&K Print Watch указываем новое соединения БД через pgBouncer.

Меняем строку соединения с БД в O&K Print Watch:

  1. Windows
    Provider=MSDASQL;Driver={PostgreSQL Unicode};Server=ИМЯ_ХОСТА_PGBOUNCER;Port=6432;Database=prnwatch_template;UID=prnwatch_user;PWD=prnwatch_password;C8=0
  2. Linux
    host=ИМЯ_ХОСТА_PGBOUNCER port=6432 dbname=prnwatch_template user=prnwatch_user password=prnwatch_password binary_parameters=yes

При использовании соединения с БД через pgBouncer необходимо отключить Use serverside prepare. В Windows версии O&K Print Watch для этого используется параметр C8=0 в строке соединения, в Linux версии binary_parameters=yes.

Перезапускаем O&K Print Watch Service:

  1. Windows в командной строке под администратором
    net stop "O&K Print Watch Service" & sc start "O&K Print Watch Service"
  2. Linux
    systemctl restart printwatch


Использование PostgreSQL как сервер базы данных в O&K Print Watch.
Настройка соединения с БД PostgreSQL.