noisia - gerador de cargas de trabalho nocivas para PostgreSQL
(github.com/lesovsky)- Ferramenta de injeção de falhas para testar, criando intencionalmente situações de falha como esgotamento de conexões/espera por locks/deadlocks/OOM/falta de disco
- Suporta vários tipos de carga de trabalho, de transações ociosas/rollbacks/deadlocks/arquivos temporários/encerramento de backends até explosão de WAL/inchaço de tabelas
- Algumas cargas podem ir além de esgotar
max_connections, atraso de replicação e degradação de desempenho de armazenamento, podendo causar PANIC ou reinicialização completa da instância PostgreSQL - Pode ser executado diretamente como imagem Docker ou ter cargas individuais importadas no código Go; é obrigatório usar context e limite de tempo para evitar execução infinita
- Cargas de trabalho suportadas
- idle transactions: mantém transações abertas sem fazer nada, atrapalhando a limpeza (
VACUUM) e inflando tabelas/índices - rollbacks: envia consultas erradas de propósito para gerar erros e aumentar a contagem de rollbacks
- waiting transactions: uma sessão bloqueia a tabela, conexões seguintes ficam enfileiradas esperando e acabam atingindo o limite de conexões (
max_connections), impedindo novas conexões - deadlocks: coloca duas transações em um impasse em que cada uma quer o lock da outra
- temporary files: força a ordenação de dados maiores que a memória (
work_mem) para despejar arquivos temporários no disco (desaparece sework_memaumentar) - terminate backends: encerra aleatoriamente sessões/consultas em execução à força com
pg_terminate_backend()etc. - failed connections: prende todas as conexões para que outros clientes não consigam se conectar. Esgota o limite de
max_connections - fork connections: envia apenas consultas curtas em uma nova conexão a cada vez, fazendo o Postgres criar processos filhos em excesso
- backend-killer: uma sessão continua acumulando prepared statements e inflando a memória até provocar OOM-kill e reiniciar a instância inteira
- slot-bloat: um replication slot que ninguém consome retém WAL e enche
pg_walaté esgotar o disco, levando a instância a entrar em PANIC - wal-flood: usa workers paralelos de
UPDATEpara inundar o WAL e criar atraso de replicação/pressão de I/O (uma versão mais “visível” de slot-bloat; o esgotamento de disco depende do ambiente) - bloat-churn: infla tabelas com
UPDATEparalelo mais rápido que o autovacuum, mas após parar pode ser revertido comVACUUM FULL/pg_repack/REINDEX CONCURRENTLY
- idle transactions: mantém transações abertas sem fazer nada, atrapalhando a limpeza (
- Não execute sem entender completamente; deve ser usado apenas para testes
- Licença BSD-3-Clause
Ainda não há comentários.