Como Fazer Benchmark no PostgreSQL para um Desempenho Ótimo

À medida que a adoção do PostgreSQL cresce, os administradores de banco de dados (DBAs) e os desenvolvedores frequentemente precisam avaliar seu desempenho para garantir que suas aplicações rodem de forma eficiente sob diferentes cargas de trabalho. A realização de testes de desempenho é um processo crítico que mede o quão bem o PostgreSQL lida com cargas variadas, ajudando a identificar gargalos e áreas para otimização. Este artigo explora ferramentas, métricas e cenários de teste para ajudá-lo a realizar testes de desempenho no PostgreSQL como um profissional.

Por que Testar o PostgreSQL?

Realizar testes permite que você:

  1. Medir a taxa de transferência e a latência do seu banco de dados sob cargas de trabalho específicas.
  2. Identificar gargalos de hardware ou configuração.
  3. Comparar o impacto de otimizações como mudanças em índices ou reescritas de consultas.
  4. Simular cenários do mundo real, como alta atividade de usuários concorrentes ou escritas de dados em massa.

Métricas Chave para Acompanhar

Ao realizar testes de desempenho no PostgreSQL, concentre-se nessas métricas:

  • TPS (Transações Por Segundo): Mede quantas transações o banco de dados completa em um segundo.
  • IOPS (Operações de Entrada/Saída Por Segundo): Acompanha a atividade de disco.
  • Latência: Mede o tempo necessário para executar consultas, o que impacta a experiência do usuário.
  • Utilização de Recursos: Acompanha o uso de CPU, memória e disco durante o teste.

Ferramentas para Testes de Desempenho no PostgreSQL

1. pgbench

O que é pgbench?

pgbench é a ferramenta de benchmarking integrada ao PostgreSQL. Ela simula clientes concorrentes executando transações e mede o desempenho do banco de dados.

Instalação

Ele é incluído nas instalações do PostgreSQL. Para verificar, execute:

Shell

 

bash
pgbench --version

Primeiros Passos

1. Inicialize um banco de dados de benchmark:

Shell

 

bash
pgbench -i -s 50 mydb

Aqui, -s define o fator de escala, que determina o tamanho do conjunto de dados.

2. Execute um benchmark simples:

Shell

 

bash
pgbench -c 10 -j 2 -T 60 mydb

  • -c 10: Número de conexões de clientes.
  • -j 2: Número de threads.
  • -T 60: Duração do benchmark em segundos.

Saída de exemplo:

YAML

 

transaction type: TPC-B (sort of)
scaling factor: 50
number of clients: 10
number of threads: 2
duration: 60 s
tps = 1420.123 (excluding connections establishing)

2. Sysbench

Por que usar o Sysbench?

O Sysbench é uma ferramenta de benchmarking versátil para bancos de dados e sistemas. Ele oferece mais flexibilidade do que o pgbench para cargas de trabalho personalizadas.

Instalação

Instale o Sysbench usando o seguinte comando:

Shell

 

bash
sudo apt-get install sysbench

Primeiros Passos

1. Prepare o benchmark:

Shell

 

bash
sysbench --db-driver=pgsql --pgsql-db=mydb \
  --pgsql-user=postgres --tables=10 --table-size=1000000 \
  oltp_read_write prepare

2. Execute o benchmark:

Shell

 

bash
sysbench --db-driver=pgsql --pgsql-db=mydb \
  --pgsql-user=postgres --threads=4 \
  --time=60 oltp_read_write run

3. pg_stat_statements

O que é pg_stat_statements?

Uma extensão do PostgreSQL que rastreia o desempenho das consultas e estatísticas de execução. Embora não simule cargas de trabalho, ajuda a analisar consultas lentas durante testes de referência.

Configuração

1. Ative a extensão no postgresql.conf:

Plain Text

 

shared_preload_libraries = 'pg_stat_statements'

2. Recarregue a configuração e crie a extensão:

SQL

 

CREATE EXTENSION pg_stat_statements;

Utilização

Execute a seguinte consulta para identificar declarações de longa duração:

SQL

 

SELECT query, total_exec_time, calls
FROM pg_stat_statements
ORDER BY total_exec_time DESC;

Cenários de Teste

Abaixo está uma representação visual dos resultados dos testes para três cenários: carga de leitura intensa, carga de escrita intensa e cargas de trabalho mistas. O diagrama de transações por segundo (TPS) demonstra a capacidade do PostgreSQL de lidar eficientemente com transações concorrentes, enquanto o diagrama de latência ilustra o tempo necessário para a execução da consulta em milissegundos.

Transações por Segundo (TPS) do PostgreSQL

Latência da Consulta do PostgreSQL

Tipos de Cargas de Trabalho

1. Cargas de Trabalho de Leitura Intensa

Objetivo: Testar o desempenho do banco de dados sob alta atividade de leitura.

Configuração: Use o pgbench com transações padrão somente de leitura:

Shell

 

bash
pgbench -c 50 -T 120 -S mydb

  • -S: Executar apenas consultas SELECT.
  • -c 50: Simular 50 clientes concorrentes.

2. Cargas de Trabalho de Escrita Intensa

Objetivo: Medir o desempenho do banco de dados com inserções ou atualizações frequentes.

Configuração: Modifique o teste para incluir escritas:

Shell

 

bash
pgbench -c 20 -j 4 -T 120 -N mydb

  • -N: Executar consultas não SELECT.

3. Cargas de Trabalho de Leitura/Gravação Mistas

Objetivo: Simular uma carga de trabalho do mundo real que mistura leituras e gravações.

Configuração: Use uma configuração equilibrada:

Shell

 

bash
pgbench -c 30 -j 4 -T 180 mydb

Otimizando o PostgreSQL para Melhores Resultados de Benchmark

Ajustar Configurações de Memória

Ajuste esses parâmetros em postgresql.conf:

Plain Text

 

shared_buffers = 25% of system memory
work_mem = 4MB
maintenance_work_mem = 64MB

Ativar Execução de Consulta Paralela

Ajuste esses parâmetros em postgresql.conf:

Plain Text

 

max_parallel_workers_per_gather = 4

Otimizar E/S de Disco

Use SSDs para arquivos WAL e ajuste essas configurações:

Plain Text

 

wal_buffers = 16MB
synchronous_commit = off

Exemplo de Resultados e Interpretação

Cenário: 50 clientes concorrentes executando uma carga de trabalho com muita leitura por 60 segundos.

Saída:

Plain Text

 

tps = 2500.456 (excluding connections establishing)

Interpretação: O banco de dados é capaz de lidar com 2500 transações por segundo sob essa carga de trabalho.

Se o TPS for mais baixo do que o esperado, analise os planos de consulta usando EXPLAIN ANALYZE para identificar gargalos de desempenho.

Conclusão

A avaliação de desempenho do PostgreSQL é uma forma poderosa de identificar limitações de desempenho e otimizar seu banco de dados para diversas cargas de trabalho. Ferramentas como pgbench e sysbench, combinadas com insights do pg_stat_statements, permitem que você simule cenários do mundo real e ajuste configurações do PostgreSQL.

Ao dominar essas ferramentas e técnicas, você pode garantir que sua instância do PostgreSQL ofereça alto desempenho tanto para aplicativos com intensidade de leitura quanto para aqueles com alta carga de gravação.

Source:
https://dzone.com/articles/how-to-benchmark-postgresql-for-optimal-performance