Simular Carga de Clientes com pgbench
Para observar o pooling de conexões em ação, você usará o pgbench, uma ferramenta de benchmarking padrão incluída com o PostgreSQL. O pgbench pode simular múltiplos clientes acessando o banco de dados simultaneamente.
Primeiro, você precisa inicializar o ambiente do pgbench. Isso cria algumas tabelas e as popula com dados de exemplo. Execute o seguinte comando, certificando-se de se conectar através da porta do PgBouncer (6432).
pgbench -i -h 127.0.0.1 -p 6432 -U postgres postgres
Você será solicitado a digitar a senha (labex_password). A flag -i inicializa o banco de dados para benchmarking. Você deverá ver uma saída indicando que as tabelas foram criadas e populadas.
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).
Agora, execute o benchmark para simular uma carga. O seguinte comando simula 10 clientes concorrentes (-c 10), com cada cliente executando 300 transações (-t 300).
pgbench -c 10 -t 300 -h 127.0.0.1 -p 6432 -U postgres postgres
Novamente, digite a senha quando solicitado. O benchmark será executado por alguns segundos e, em seguida, exibirá um resumo dos resultados, incluindo o número de transações por segundo (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)
Este teste gerou tráfego significativo através do PgBouncer, que inspecionaremos na próxima etapa.