Симуляция нагрузки на клиента с помощью pgbench
Чтобы наблюдать работу пула соединений, вы будете использовать pgbench — стандартный инструмент для тестирования производительности, входящий в состав PostgreSQL. pgbench может симулировать одновременный доступ множества клиентов к базе данных.
Сначала вам нужно инициализировать среду pgbench. Это создаст несколько таблиц и заполнит их образцами данных. Выполните следующую команду, убедившись, что вы подключаетесь через порт PgBouncer (6432).
pgbench -i -h 127.0.0.1 -p 6432 -U postgres postgres
Вам будет предложено ввести пароль (labex_password). Флаг -i инициализирует базу данных для тестирования производительности. Вы должны увидеть вывод, указывающий на то, что таблицы были созданы и заполнены.
dropping old tables...
NOTICE: table "pgbench_accounts" does not exist, skipping
NOTICE: table "pgbench_branches" does not exist, skipping
NOTICE: table "pgbench_history" does not exist, skipping
NOTICE: table "pgbench_tellers" does not exist, skipping
creating tables...
generating data (client-side)...
100000 of 100000 tuples (100%) done (elapsed 0.01 s, remaining 0.00 s)
vacuuming...
creating primary keys...
done in 0.13 s (drop tables 0.00 s, create tables 0.00 s, client-side generate 0.06 s, vacuum 0.04 s, primary keys 0.02 s).
Теперь запустите тестирование производительности для симуляции нагрузки. Следующая команда симулирует 10 одновременных клиентов (-c 10), причем каждый клиент выполняет 300 транзакций (-t 300).
pgbench -c 10 -t 300 -h 127.0.0.1 -p 6432 -U postgres postgres
Снова введите пароль, когда будет предложено. Тестирование производительности займет несколько секунд, а затем отобразит сводку результатов, включая количество транзакций в секунду (tps).
pgbench (14.18 (Ubuntu 14.18-0ubuntu0.22.04.1))
starting vacuum...end.
transaction type: <builtin: TPC-B (sort of)>
scaling factor: 1
query mode: simple
number of clients: 10
number of threads: 1
number of transactions per client: 300
number of transactions actually processed: 3000/3000
latency average = 5.935 ms
initial connection time = 1.342 ms
tps = 1685.027854 (without initial connection time)
Этот тест сгенерировал значительный трафик через PgBouncer, который мы рассмотрим на следующем шаге.