5.8 KiB
Configuração de Pool de Conexões
Este documento descreve a configuração do pool de conexões implementada para os bancos de dados Oracle e PostgreSQL na aplicação.
Visão Geral
O pool de conexões é uma técnica que mantém um conjunto de conexões abertas com o banco de dados, permitindo seu reuso entre diferentes requisições. Isso traz diversos benefícios:
- Melhor performance: Eliminação do overhead de abertura e fechamento de conexões
- Melhor escalabilidade: Gerenciamento eficiente do número máximo de conexões
- Maior resiliência: Tratamento de falhas de conexão e reconexão automática
- Menor carga no banco de dados: Menor número de operações de login/logout
Configuração do Oracle
Parâmetros Configuráveis
Os seguintes parâmetros podem ser configurados através do arquivo .env:
| Parâmetro | Descrição | Valor Padrão |
|---|---|---|
ORACLE_POOL_MIN |
Número mínimo de conexões no pool | 5 |
ORACLE_POOL_MAX |
Número máximo de conexões no pool | 20 |
ORACLE_POOL_INCREMENT |
Incremento no número de conexões quando necessário | 5 |
ORACLE_POOL_TIMEOUT |
Tempo máximo (ms) para obter uma conexão | 30000 |
ORACLE_POOL_IDLE_TIMEOUT |
Tempo máximo (ms) que uma conexão pode ficar inativa | 300000 |
Configurações Adicionais
Além dos parâmetros acima, as seguintes configurações foram implementadas:
- Statement Cache: Cache de 30 statements para melhorar a performance de queries repetidas
- Connection Class: Identificador 'PORTALJURU' para rastrear conexões no banco
- Pool Ping Interval: Verificação a cada 60 segundos para manter conexões ativas
- Enable Stats: Habilitação de estatísticas para monitoramento do pool
Configuração do PostgreSQL
Parâmetros Configuráveis
Os seguintes parâmetros podem ser configurados através do arquivo .env:
| Parâmetro | Descrição | Valor Padrão |
|---|---|---|
POSTGRES_POOL_MIN |
Número mínimo de conexões no pool | 5 |
POSTGRES_POOL_MAX |
Número máximo de conexões no pool | 20 |
POSTGRES_POOL_IDLE_TIMEOUT |
Tempo máximo (ms) que uma conexão pode ficar inativa | 30000 |
POSTGRES_POOL_CONNECTION_TIMEOUT |
Tempo máximo (ms) para estabelecer uma conexão | 5000 |
POSTGRES_POOL_ACQUIRE_TIMEOUT |
Tempo máximo (ms) para obter uma conexão do pool | 60000 |
Configurações Adicionais
Além dos parâmetros acima, as seguintes configurações foram implementadas:
- Statement Timeout: Limite de 10 segundos para execução de queries
- Query Timeout: Limite de 10 segundos para execução de queries
- SSL: Configuração automática baseada no ambiente (development/production)
- Query Cache: Cache de 60 segundos para resultados de consultas
Validação de Valores
O sistema implementa validação rigorosa para garantir valores apropriados:
- Conversão Explícita: Todos os valores de configuração são explicitamente convertidos para números (parseInt)
- Valores Mínimos: Cada parâmetro tem um valor mínimo aplicado automaticamente
- poolMin: no mínimo 1
- poolMax: no mínimo poolMin + 1
- timeouts: no mínimo 1000ms
- Validação de Relações: O sistema garante que poolMax seja sempre maior que poolMin
- Arredondamento: Valores convertidos de milissegundos para segundos são arredondados (Math.floor)
Estas validações previnem erros comuns como:
- "NJS-007: invalid value for poolMax"
- Timeouts negativos ou muito baixos
- Problemas de conversão entre strings e números
Boas Práticas
Dimensionamento do Pool
O dimensionamento do pool de conexões depende da carga esperada:
- Fórmula Básica:
connections = ((core_count * 2) + effective_spindle_count) - Ambiente Web: Considere o número máximo de requisições concorrentes
- Regra 80-20: O pool deve ser dimensionado para acomodar 80% da carga de pico
Monitoramento
Para garantir o funcionamento adequado do pool, monitore:
- Taxa de uso do pool: Número de conexões ativas vs. total
- Tempo de espera por conexão: Tempo médio para obter uma conexão
- Erros de timeout: Número de falhas por timeout
- Conexões mortas: Conexões que falharam mas não foram removidas do pool
Ajuste Fino
Para ambientes de produção, considere os seguintes ajustes:
- Tamanho do pool: Ajuste baseado no número de requisições concorrentes
- Tempo de idle: Reduza em ambientes com muitos usuários esporádicos
- Tempo de timeout: Aumente em caso de operações mais longas
- Statement cache: Aumente para aplicações com queries repetitivas
Implementação no TypeORM
A configuração foi implementada nos arquivos:
src/core/configs/typeorm.oracle.config.tssrc/core/configs/typeorm.postgres.config.ts
Estas configurações são carregadas no início da aplicação e aplicadas a todas as conexões.
Resolução de Problemas
Erros Comuns
| Erro | Causa Provável | Solução |
|---|---|---|
NJS-007: invalid value for poolMax |
Valor não numérico para poolMax | Agora resolvido com conversão explícita para número |
Connection timeout |
Tempo insuficiente para conectar | Aumente POSTGRES_POOL_CONNECTION_TIMEOUT |
All connections in use |
Pool muito pequeno para a carga | Aumente ORACLE_POOL_MAX/POSTGRES_POOL_MAX |
Error acquiring client |
Problema na criação de conexões | Verifique credenciais e disponibilidade do banco |
Melhores Práticas para Diagnóstico
- Use o endpoint de health check: Verifique estatísticas do pool em
/health/pool - Analise logs: Procure por padrões de erro relacionados a conexões
- Monitore performance: Observe tempos de resposta e correlacione com o uso do pool