# 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: 1. **Fórmula Básica**: `connections = ((core_count * 2) + effective_spindle_count)` 2. **Ambiente Web**: Considere o número máximo de requisições concorrentes 3. **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: 1. **Tamanho do pool**: Ajuste baseado no número de requisições concorrentes 2. **Tempo de idle**: Reduza em ambientes com muitos usuários esporádicos 3. **Tempo de timeout**: Aumente em caso de operações mais longas 4. **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.ts` - `src/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. ### Melhores Práticas para Diagnóstico 1. **Use o endpoint de health check**: Verifique estatísticas do pool em `/health/pool` 2. **Analise logs**: Procure por padrões de erro relacionados a conexões 3. **Monitore performance**: Observe tempos de resposta e correlacione com o uso do pool