Уровень 3.0
Предусловия:
- Изучена лекция 2 «Пулер соединений»
Настройка и анализ работы Pangolin Pooler
- Откройте терминал и подключитесь в psql к базе данных
postgresс рольюpostgres:
[student@ServerName ~]$ sudo -iu postgres
[postgres@ServerName ~]$ psql
psql (15.5)
Type "help" for help.
- Создайте роль
student:
postgres=# CREATE ROLE student WITH LOGIN CREATEDB PASSWORD 'student';
CREATE ROLE
- Создайте базу данных
pgbench_dbи подключитесь к ней:
postgres=# CREATE DATABASE pgbench_db WITH OWNER student;
CREATE DATABASE
- Посмотрите хеш пароля пользователя
student:
postgres=# SELECT rolpassword FROM pg_authid WHERE rolname = 'student';
rolpassword
---------------------------------------------------------------------------------------------------------------------------------------
SCRAM-SHA-256$4096:RAf9uYFejQCwQMS3kdGi8w==$2VQIEDmjVOek2V6i+ih2EArRAsmI2CJjMnDgaLELenw=:663yu3xX983xvgwI2+Ga/jIOllslzwF0xEV09fRl1J4=
(1 row)
Хеш пароля нам потребуется при настройке Pangolin Pooler.
Пароли или их хеши хранятся в системном каталоге pg_authid, доступ к которому имеет суперпользователь.
- Выйдите из сеанса
psqlи режима выполнения команд от имени пользователяpostgres:
postgres=# \q
[postgres@ServerName ~]$ exit
logout
Установка
- Проверьте наличие дистрибутива Pangolin в каталоге
Distribдомашнего каталога пользователяstudent:
[student@ServerName ~]$ ls -1 ~/Distrib
license.json
PSQ-\{pangolin_version\}-50-\{OS\}-distrib.zip
- Создайте каталог и перейдите в него для распаковки архива:
[student@ServerName ~]$ mkdir ~/Distr && cd ~/Distr
- Распакуйте монолитный архив с дистрибутивом:
[student@ServerName Distr]$ unzip ~/Distrib/PSQ-\{pangolin_version\}-50-\{OS\}-distrib.zip
Archive: /home/student/Distrib/PSQ-\{pangolin_version\}-50-\{OS\}-distrib.zip
inflating: PSQ-\{pangolin_version\}-50-\{OS\}-cyclonedx-distrib.json
inflating: PSQ-\{pangolin_version\}-50-\{OS\}-documentation-distrib.pom
inflating: PSQ-\{pangolin_version\}-50-\{OS\}-documentation-distrib.zip
inflating: PSQ-\{pangolin_version\}-50-\{OS\}-installer-distrib.pom
inflating: PSQ-\{pangolin_version\}-50-\{OS\}-installer-distrib.zip
inflating: PSQ-\{pangolin_version\}-50-\{OS\}-owned-distrib.pom
inflating: PSQ-\{pangolin_version\}-50-\{OS\}-owned-distrib.zip
inflating: PSQ-\{pangolin_version\}-50-\{OS\}-party-distrib.pom
inflating: PSQ-\{pangolin_version\}-50-\{OS\}-party-distrib.zip
inflating: PSQ-\{pangolin_version\}-50-\{OS\}-swidtag-distrib.swidtag
inflating: PSQ-\{pangolin_version\}-50-\{OS\}-unpacker-distrib.sh
- Выполните скрипт распаковки:
[student@ServerName Distr]$ bash PSQ-\{pangolin_version\}-50-\{OS\}-unpacker-distrib.sh
start
~/Distr/distributive ~/Distr
successful completion: PSQ-06.005.01-distrib.tar.gz
~/Distr
В результате выполнения скрипта установочное программное обеспечение перепаковывается в сжатый архив tar.gz с RPM-пакетами.
- Распакуйте архив
PSQ-06.005.01-distrib.tar.gzи посмотрите список полученных rpm-пакетов:
[student@ServerName Distr]$ tar xf PSQ-06.005.01-distrib.tar.gz
[student@ServerName Distr]$ ls -1 *.rpm
pangolin-backup-tools-1.2.4-\{OS\}.5.x86_64.rpm
pangolin-core-\{pangolin_version\}-\{OS\}.5.x86_64.rpm
pangolin-dbms-6.5-\{pangolin_version\}-\{OS\}.5.x86_64.rpm
pangolin-dbms-6.5-client-\{pangolin_version\}-\{OS\}.5.x86_64.rpm
pangolin-dbms-6.5-libpq-\{pangolin_version\}-\{OS\}.5.x86_64.rpm
pangolin-dbms-6.5-libpq-dev-\{pangolin_version\}-\{OS\}.5.x86_64.rpm
pangolin-full-\{pangolin_version\}-\{OS\}.5.x86_64.rpm
pangolin-full-debuginfo-\{pangolin_version\}-\{OS\}.5.x86_64.rpm
pangolin-manager-2.1.7-\{OS\}.5.x86_64.rpm
pangolin-manager-dcs-\{pangolin_version\}-\{OS\}.5.x86_64.rpm
pangolin-orchestrated-\{pangolin_version\}-\{OS\}.5.x86_64.rpm
pangolin-pooler-1.5.0-\{OS\}.5.x86_64.rpm
Pangolin Pooler содержится в пакете pangolin-pooler-1.5.0-\{OS\}.5.x86_64.rpm.
- Выполните установку пакета с Pangolin Pooler:
[student@ServerName Distr]$ sudo dnf -y install pangolin-pooler-1.5.0-\{OS\}.5.x86_64.rpm
Updating Subscription Management repositories.
...
Package Architecture Version Repository Size
==============================================================================================================================================
Installing:
pangolin-pooler x86_64 1.5.0-\{OS\}.5 @commandline 692 k
Installing dependencies:
lz4 x86_64 1.9.3-5.sl9.1 SBERTECH_JSC_SberLinux_sberlinux-95-for-x86_64-baseos-rpms 57 k
Transaction Summary
==============================================================================================================================================
Install 2 Packages
Total size: 749 k
Total download size: 57 k
Installed size: 3.3 M
Is this ok [y/N]: y
Downloading Packages:
lz4-1.9.3-5.sl9.1.x86_64.rpm 147 kB/s | 57 kB 00:00
----------------------------------------------------------------------------------------------------------------------------------------------
Total 144 kB/s | 57 kB 00:00
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
Preparing : 1/1
Installing : lz4-1.9.3-5.sl9.1.x86_64 1/2
Running scriptlet: pangolin-pooler-1.5.0-\{OS\}.5.x86_64 2/2
Installing : pangolin-pooler-1.5.0-\{OS\}.5.x86_64 2/2
Running scriptlet: pangolin-pooler-1.5.0-\{OS\}.5.x86_64 2/2
Verifying : lz4-1.9.3-5.sl9.1.x86_64 1/2
Verifying : pangolin-pooler-1.5.0-\{OS\}.5.x86_64 2/2
Installed products updated.
Installed:
lz4-1.9.3-5.sl9.1.x86_64 pangolin-pooler-1.5.0-\{OS\}.5.x86_64
Complete!
Настройка Pangolin Pooler
- Перейдите в режим выполнения команд от имени пользователя
postgres:
[student@ServerName Distr]$ sudo -iu postgres
- Перейдите в каталог
/etc/pangolin-poolerи проверьте его содержимое:
[postgres@ServerName pangolin-pooler]$ cd /etc/pangolin-pooler && ls -l -1
total 20
-rw------- 1 postgres postgres 12361 Sep 14 14:53 pangolin-pooler.ini
-rw------- 1 postgres postgres 19 Apr 23 20:57 userlist.txt
В каталоге имеется основной конфигурационный файл pangolin-pooler.ini, а также файл userlist.txt, содержащий пользователей и их пароли (или их хеши).
- Создайте копии конфигурационных файлов:
postgres@ServerName pangolin-pooler]$ cp pangolin-pooler.ini pangolin-pooler_origin.ini
[postgres@ServerName pangolin-pooler]$ cp userlist.txt userlist_origin.txt
Оригинальные файлы на всякий случай сохранены в неизменном виде.
- Добавьте пользователя
studentв файлuserlist.txt:
postgres@ServerName pangolin-pooler]$ tee userlist.txt > /dev/null << 'EOF'
"student" "SCRAM-SHA-256$4096:RAf9uYFejQCwQMS3kdGi8w==$2VQIEDmjVOek2V6i+ih2EArRAsmI2CJjMnDgaLELenw=:663yu3xX983xvgwI2+Ga/jIOllslzwF0xEV09fRl1J4="
EOF
При выполнении команды вставьте хеш пароля, который был ранее вами получен из системного каталога pg_authid.
- Задайте настройки в конфигурационном файле
pangolin-pooler.ini:
postgres@ServerName pangolin-pooler]$ tee pangolin-pooler.ini > /dev/null << 'EOF'
[databases]
* = host=localhost port=5432
[pgbouncer]
logfile = /opt/pangolin-pooler/log/pangolin-pooler.log
pidfile = /var/run/pangolin-pooler/pangolin-pooler.pid
listen_addr = localhost
listen_port = 6432
auth_type = scram-sha-256
auth_file = /etc/pangolin-pooler/userlist.txt
admin_users = student
pool_mode = transaction
default_pool_size = 5
min_pool_size = 5
max_client_conn = 101
EOF
В разделе [databases] приводится список баз данных и соответствующие параметры направления подключения.
Символ * означает, что параметры подключения распространяются на базы данных с любым именем.
В разделе [pgbouncer] приводятся общие параметры пулера соединений.
- Параметр
logfileопределяет файл для ведения журнала сообщений,pidfile— файлpidпроцесса пулера соединений - Параметры
listen_addrиlisten_portопределяют список адресов и порт для прослушивания подключений пулером - Параметры
auth_typeиauth_fileопределяют метод аутентификации и файл со списком пользователей с паролями (хешами) - Параметр
admin_usersопределяет список пользователей, которым доступна консоль управления пулером - Параметр
pool_modeопределяет режим пулинга. В этом случае выбран наиболее востребованный режимtransactionВспомним, что такой режим предполагает предоставление клиенту соединения из пула только на время выполнения транзакции.
- Параметры
default_pool_sizeиmin_pool_sizeопределяют предельное и минимальное количества соединений в каждом из пулов соединений. В этом случае они совпадают и равны 5. Это означает, что для каждого пула соединений будут сразу организованы все 5 соединений, которые не будут закрываться, даже если они не используютсяВспомним, что для каждой пары «база данных–роль» создается свой пул соединений.
- Параметр
max_client_connопределяет предельное количество соединений клиентов с пулером. В этом случае выбрано значение 101 для того, чтобы в ходе эксперимента к пулеру могли подключаться до 100 клиентов, а одно соединение использовалось для управления пулом через консоль
- Выйдите из сеанса пользователя
postgresи перезапустите Pangolin Pooler:
[postgres@ServerName pangolin-pooler]$ exit
logout
[student@ServerName Distr]$ sudo systemctl restart pangolin-pooler
Перезапуск потребовался для применения конфигурационных параметров.
- Подключитесь в
psqlк базе данныхpgbench_dbпосредством пулера, введя пароль "student":
[student@ServerName Distr]$ psql -d pgbench_db -U student -h localhost -p 6432
Password for user student:
psql (15.5)
Type "help" for help.
Подключение прошло успешно. О том, что подключение было именно к пулеру, а не к экземпляру сервера напрямую, можно догадаться только по номеру порта -p 6432.
- Проверьте состояние обслуживающих процессов с использованием представления
pg_stat_activity:
pgbench_db=> SELECT pid, usename, wait_event_type, wait_event, backend_type FROM pg_stat_activity WHERE backend_type = 'client backend';
pid | usename | wait_event_type | wait_event | backend_type
--------+---------+-----------------+------------+----------------
212508 | student | | | client backend
212507 | student | Client | ClientRead | client backend
212506 | student | Client | ClientRead | client backend
212505 | student | Client | ClientRead | client backend
212504 | student | Client | ClientRead | client backend
(5 rows)
После подключения пулер сразу организовал пять соединений с соответствующими обслуживающими процессами (backend_type=client backend).
Четыре обслуживающих процесса находятся в режиме ожидания запросов от клиентов (wait_event=ClientRead), пятый выполняет собственно запрос к pg_stat_activity.
- Выйдите из сеанса
psqlи перейдите в режим выполнения команд от имени пользователяpostgres:
pgbench_db=> \q
[student@ServerName Distr]$ sudo -iu postgres
Анализ работы Pangolin Pooler
- Откройте второй терминал и подключитесь в нем к виртуальной базе данных
pgbouncer, введя пароль "student":
[student@ServerName ~]$ psql -d pgbouncer -U student -h localhost -p 6432
Password for user student:
psql (15.5, server 1.24.0/bouncer)
WARNING: psql major version 15, server major version 1.24.
Some psql features might not work.
Type "help" for help.
Вспомним, что для управления и мониторинга Pangolin Pooler предусмотрена специальная консоль, для подключения к которой применяется «виртуальная» база данных pgbouncer.
- Откройте третий терминал, проинициализируйте и запустите 5-минутный тест
pgbench, введя пароль "student":
[student@ServerName ~]$ pgbench -i -d pgbench_db -U student -h localhost -p 6432
Password:
dropping old tables...
creating tables...
generating data (client-side)...
100000 of 100000 tuples (100%) done (elapsed 0.02 s, remaining 0.00 s)
vacuuming...
creating primary keys...
done in 0.20 s (drop tables 0.02 s, create tables 0.01 s, client-side generate 0.08 s, vacuum 0.04 s, primary keys 0.05 s).
[student@ServerName ~]$ pgbench -c 100 -T 300 -d pgbench_db -U student -h localhost -p 6432
Password:
...
Тест pgbench запущен на 5 минут (-T 300) через пулер соединений (-p 6432) с количеством клиентов, равным 100 (-c 100).
- Во втором сеансе посмотрите состояние пулов соединений:
pgbouncer=# SHOW POOLS\gx
-[ RECORD 1 ]---------+------------
database | pgbench_db
user | student
cl_active | 6
cl_waiting | 94
cl_active_cancel_req | 0
cl_waiting_cancel_req | 0
sv_active | 5
sv_active_cancel | 0
sv_being_canceled | 0
sv_idle | 0
sv_used | 0
sv_tested | 0
sv_login | 0
maxwait | 0
maxwait_us | 137084
avg_time | 0
avg_time_us | 2784
max_time | 0
max_time_us | 3184
pool_mode | transaction
load_balance_hosts |
-[ RECORD 2 ]---------+------------
database | pgbouncer
user | pgbouncer
cl_active | 1
cl_waiting | 0
cl_active_cancel_req | 0
cl_waiting_cancel_req | 0
sv_active | 0
sv_active_cancel | 0
sv_being_canceled | 0
sv_idle | 0
sv_used | 0
sv_tested | 0
sv_login | 0
maxwait | 0
maxwait_us | 0
avg_time | 0
avg_time_us | 0
max_time | 0
max_time_us | 0
pool_mode | statement
load_balance_hosts |
Команда SHOW POOLS показывает текущее состояние имеющихся пулеров.
В этом случае первая запись соответствует пулу «pgbench_db–student», вторая — консоли управления.
Пулером обслуживаются в настоящий момент шесть клиентов (cl_active=6), несмотря на то что соединений с экземпляром используется только пять (cv_active=5). Дело в том, что в поле cl_active учитываются клиенты, как связанные с серверными подключениями, так и находящиеся в режиме ожидания без запроса на обработку.
94 клиента ожидают обслуживания (cl_waiting=94), то есть направили свои запросы, но свободных соединений не оказалось.
Также стоит обращать внимание на поле maxwait, показывающее максимальное время ожидания клиента. Если значение начинает расти, значит, пулер не справляется с клиентской нагрузкой.
- Во втором сеансе приостановите обслуживание клиентов:
pgbouncer=# PAUSE;
PAUSE
Вспомним, что консоль управления предоставляет возможность приостановки обслуживания клиентов.
- В третьем сеансе убедитесь, что выполнение транзакций утилитой
pgbenchприостановлено:
...
pgbench: client 38 executing script "<builtin: TPC-B (sort of)>"
pgbench: client 38 executing \set aid
pgbench: client 38 executing \set bid
pgbench: client 38 executing \set tid
pgbench: client 38 executing \set delta
pgbench: client 38 sending BEGIN;
pgbench: client 38 receiving
Вывод сообщений pgbench должен быть приостановлен.
- В первом сеансе перезапустите экземпляр Pangolin:
[postgres@ServerName ~]$ pg_ctl restart -l logfile
waiting for server to shut down.... done
server stopped
waiting for server to start.... done
server started
Приостановка позволяет перезапустить экземпляр, например для обновления или применения параметров, требующих перезапуска.
- Во втором сеансе восстановите обслуживание клиентов:
pgbouncer=# RESUME;
RESUME
- В третьем сеансе дождитесь завершения теста
pgbench:
...
transaction type: <builtin: TPC-B (sort of)>
scaling factor: 1
query mode: simple
number of clients: 100
number of threads: 1
maximum number of tries: 1
duration: 300 s
number of transactions actually processed: 133035
number of failed transactions: 0 (0.000%)
latency average = 225.288 ms
initial connection time = 472.879 ms
tps = 443.876856 (without initial connection time)
pgbench практически не заметил перезагрузки экземпляра сервера. По крайней мере, соединение с пулером разорвано не было.
Обратите внимание на общее количество выполненных транзакций (number of transactions actually processed: 133035).
- Во втором сеансе посмотрите накопленную статистику пулера соединений:
pgbouncer=# SHOW STATS\gx
-[ RECORD 1 ]-----------------+------------
database | pgbench_db
total_server_assignment_count | 133040
total_xact_count | 133040
total_query_count | 931250
total_received | 56272092
total_sent | 24808818
total_xact_time | 29705513650
total_query_time | 29393979366
total_wait_time | 28595843687
total_client_parse_count | 0
total_server_parse_count | 0
total_bind_count | 0
avg_server_assignment_count | 0
avg_xact_count | 0
avg_query_count | 0
avg_recv | 0
avg_sent | 0
avg_xact_time | 0
avg_query_time | 0
avg_wait_time | 0
avg_client_parse_count | 0
avg_server_parse_count | 0
avg_bind_count | 0
-[ RECORD 2 ]-----------------+------------
database | pgbouncer
total_server_assignment_count | 0
total_xact_count | 1
total_query_count | 1
total_received | 0
total_sent | 0
total_xact_time | 0
total_query_time | 0
total_wait_time | 0
total_client_parse_count | 0
total_server_parse_count | 0
total_bind_count | 0
avg_server_assignment_count | 0
avg_xact_count | 0
avg_query_count | 0
avg_recv | 0
avg_sent | 0
avg_xact_time | 0
avg_query_time | 0
avg_wait_time | 0
avg_client_parse_count | 0
avg_server_parse_count | 0
avg_bind_count | 0
Команда SHOW STATS показывает накопленную статистику пулеров соединений.
Поле total_xact_count показывает, сколько транзакций было выполнено посредством пулера. В этом случае их количество чуть больше, чем количество в выводе утилиты pgbench (133040 > 133035).
Это связано с тем, что pgbench выполнял транзакции при инициализации, а также с тем, что мы выполняли запрос к pg_stat_activity.
Поле total_server_assignment_count показывает, сколько раз клиенту было предоставлено соединение с экземпляром.
В этом случае значение указанного поля совпадает с количеством выполненных транзакций.
Это связано с режимом пулинга — в пуле транзакций для каждой транзакции соединение предоставляется заново.
Подготовленные операторы и пул транзакций
- В первом сеансе подключитесь в
psqlк базе данныхpgbench_dbпосредством пулера, введя пароль "student":
[postgres@ServerName ~]$ psql -d pgbench_db -U student -h localhost -p 6432
Password for user student:
psql (15.5)
Type "help" for help.
- В первом сеансе начните транзакцию и посмотрите
pidобслуживающего процесса:
pgbench_db=> BEGIN;
BEGIN
pgbench_db=*> SELECT pg_backend_pid();
pg_backend_pid
----------------
215516
(1 row)
- В первом сеансе подготовьте запрос командой
PREPAREи зафиксируйте транзакцию:
pgbench_db=*> PREPARE branches AS SELECT * FROM pgbench_branches;
PREPARE
pgbench_db=*> COMMIT;
COMMIT
Вспомним, что подготовленные операторы хранятся в памяти обслуживающего процесса.
- В третьем сеансе подключитесь в
psqlк базе данныхpgbench_dbпосредством пулера, введя пароль "student":
[postgres@ServerName ~]$ psql -d pgbench_db -U student -h localhost -p 6432
Password for user student:
psql (15.5)
Type "help" for help.
- В третьем сеансе начните транзакцию и попытайтесь выполнить подготовленный запрос:
pgbench_db=> BEGIN;
BEGIN
pgbench_db=*> EXECUTE branches;
bid | bbalance | filler
-----+----------+--------
1 | 319792 |
(1 row)
Подготовленный запрос успешно выполнился, несмотря на то, что выполнялся в другом сеансе связи.
Дело в том, что в режиме пула транзакций для каждой транзакции назначается новое соединение с экземпляром.
В этом случае после завершения транзакции в первом сеансе соединение с экземпляром было освобождено и переиспользовано для транзакции в третьем сеансе.
- В третьем сеансе посмотрите
pidобслуживающего процесса:
pgbench_db=*> SELECT pg_backend_pid();
pg_backend_pid
----------------
215516
(1 row)
Транзакция в третьем сеансе выполняется тем же обслуживающим процессом, которым был создан подготовленный оператор.
- В первом сеансе выполните подготовленный запрос:
pgbench_db=> EXECUTE branches;
ERROR: prepared statement "branches" does not exist
А в первом сеансе выполнение подготовленного оператора приводит к ошибке, поскольку для новой транзакции ему было предоставлено новое соединение (предыдущее соединение удерживается незавершенной транзакцией).
Вспомним, что подготовленные операторы все же могут быть использованы посредством Pangolin Pooler начиная с версии 5.1.0. Однако это возможно только на уровне клиент-серверного протокола, то есть за подготовку операторов должен отвечать драйвер для кого-либо языка программирования, формирующий сообщения протокола взаимодействия с Pangolin Pooler.
Завершение
- В первом сеансе выйдите из
psqlи режима выполнения команд от имени пользователяpostgres:
pgbench_db=> \q
[postgres@ServerName ~]$ exit
logout
- Во втором сеансе выйдите из
psql:
pgbouncer=# \q
- В третьем сеансе откатите транзакцию и выйдите из
psql:
pgbench_db=*> ROLLBACK;
ROLLBACK
pgbench_db=> \q
- В третьем сеансе подключитесь к базе данных
postgresс рольюpostgres:
[student@ServerName ~]$ sudo -iu postgres
[postgres@ServerName ~]$ psql
psql (15.5)
Type "help" for help.
- В первом сеансе остановите Pangolin Pooler:
[student@ServerName ~]$ sudo systemctl stop pangolin-pooler
- В третьем сеансе удалите базу данных
pgbench_db:
postgres=# DROP DATABASE pgbench_db;
DROP DATABASE
- В третьем сеансе удалите роль
studentи выйдите из сеанса:
postgres=# DROP ROLE student;
DROP ROLE
postgres=# \q
[postgres@ServerName ~]$ exit
logout
Самопроверка
Вопрос 1
Содержимое файла pangolin-pooler.ini представлено ниже:
[databases]
* = host=localhost port=5432
[pgbouncer]
logfile = /opt/pangolin-pooler/log/pangolin-pooler.log
pidfile = /var/run/pangolin-pooler/pangolin-pooler.pid
listen_addr = *
listen_port = 6432
auth_type = scram-sha-256
auth_file = /etc/pangolin-pooler/userlist.txt
admin_users = pooler_admin
pool_mode = session
default_pool_size = 100
min_pool_size = 100
max_client_conn = 1000
Команда подключения к пулеру соединений с указанными настройками приведена ниже:
[student@pangolin-prac-d0hicm ~]$ psql -d pgbouncer -U student -h localhost -p 6432
Каким будет результат выполнения данной команды?
Вопрос 2
Последовательность команд в сеансе psql взаимодействия с базой данных some_db посредством пула соединений представлена ниже:
some_db=> BEGIN;
BEGIN
some_db=> SELECT pg_backend_pid();
pg_backend_pid
----------------
215522
(1 row)
some_db=> INSERT INTO some_table VALUES(1,100);
INSERT 0 1
some_db=> COMMIT;
COMMIT
some_db=> SELECT pg_backend_pid();
pg_backend_pid
----------------
215520
(1 row)
В каком режиме пулинга соединений могла быть выполнена приведенная последовательность команд?
Вопрос 3
Результат выполнения команды в psql представлен ниже:
pgbouncer=# SHOW POOLS\gx
-[ RECORD 1 ]---------+------------
database | some_db
user | student
cl_active | 13
cl_waiting | 54
cl_active_cancel_req | 0
cl_waiting_cancel_req | 0
sv_active | 11
sv_active_cancel | 0
sv_being_canceled | 0
sv_idle | 0
sv_used | 0
sv_tested | 0
sv_login | 0
maxwait | 0
maxwait_us | 187674
avg_time | 0
avg_time_us | 2891
max_time | 0
max_time_us | 5204
pool_mode | transaction
load_balance_hosts |
Какое количество соединений установлено с базой данных some_db посредством пула, состояние которого представлено выше?
Вопрос 4
Содержимое файла pangolin-pooler.ini представлено ниже:
[databases]
some_db1 = host=localhost port=5432
some_db2 = host=localhost port=5432
[pgbouncer]
logfile = /opt/pangolin-pooler/log/pangolin-pooler.log
pidfile = /var/run/pangolin-pooler/pangolin-pooler.pid
listen_addr = *
listen_port = 6432
auth_type = md5
auth_file = /etc/pangolin-pooler/userlist.txt
admin_users = pooler_admin
pool_mode = transaction
default_pool_size = 50
min_pool_size = 10
max_client_conn = 300
Какое максимальное количество соединений с базой данных some_db1 может быть одновременно установлено посредством пулера с представленными настройками?