Todos os produtos
Search
Central de documentação

AnalyticDB:Pool de conexões Druid

Última atualização: Jun 27, 2026

A configuração incorreta do pool de conexões do AnalyticDB for MySQL pode causar quedas de conexão, distribuição desigual de carga entre os nós de frontend e esgotamento do pool durante picos de tráfego. Este tópico demonstra como configurar o Druid para estabelecer uma conexão confiável com um cluster do AnalyticDB for MySQL no Spring Framework, apresentando valores de parâmetros recomendados e orientações de diagnóstico.

Pré-requisitos

Antes de começar, verifique se você tem:

  • Versão do Druid superior a 1.1.16

  • O endpoint do cluster, disponível na página Cluster Information do console do AnalyticDB for MySQL

  • Uma conta de banco de dados (privilegiada ou padrão) e a respectiva senha

Como o AnalyticDB for MySQL utiliza conexões

O AnalyticDB for MySQL usa o Server Load Balancer (SLB) para distribuir o tráfego entre os nós de frontend. Essa arquitetura exige as seguintes práticas:

  • Configure um número elevado de conexões para distribuir as requisições uniformemente por todos os nós de frontend.

  • Defina maxEvictableIdleTimeMillis com um valor baixo para reciclar rapidamente as conexões ociosas e evitar a concentração de carga em poucos nós.

  • Defina keepAlive como true para reutilizar conexões e evitar a sobrecarga de conexões efêmeras.

Configure o pool de conexões

O trecho XML a seguir configura um bean DruidDataSource para o Spring Framework. Substitua os três espaços reservados ${...} pelos seus valores reais.

<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
      init-method="init" destroy-method="close">

    <!-- Connection credentials -->
    <property name="url"      value="${jdbc_url}" />
    <property name="username" value="${jdbc_user}" />
    <property name="password" value="${jdbc_password}" />

    <!-- Pool size -->
    <property name="initialSize" value="5" />
    <property name="minIdle"     value="10" />
    <property name="maxActive"   value="20" />

    <!-- Connection acquisition timeout (ms) -->
    <property name="maxWait" value="60000" />

    <!-- Idle connection lifetime (ms)
         Connections idle longer than maxEvictableIdleTimeMillis are removed.
         Set maxEvictableIdleTimeMillis to a small value so idle connections
         rotate across SLB frontend nodes, keeping the load balanced. -->
    <property name="minEvictableIdleTimeMillis" value="600000" />
    <property name="maxEvictableIdleTimeMillis" value="900000" />

    <!-- Idle-connection scan interval (ms)
         Default: 60000. A value that is too high may prevent Druid from
         detecting dropped connections in time. -->
    <property name="timeBetweenEvictionRunsMillis" value="2000" />

    <!-- Validate connections idle longer than timeBetweenEvictionRunsMillis.
         Prefer this over testOnBorrow/testOnReturn in normal networks. -->
    <property name="testWhileIdle" value="true" />

    <!-- Validate on borrow/return — enable only in highly important or unreliable network scenarios. -->
    <property name="testOnBorrow" value="false" />
    <property name="testOnReturn" value="false" />

    <!-- Keepalive — prevents short-lived connections and improves connection reuse.
         Default for keepAliveBetweenTimeMillis: 120000 ms. -->
    <property name="keepAlive"                 value="true" />
    <property name="keepAliveBetweenTimeMillis" value="30000" />

    <!-- Limit reuse per connection to avoid long-term load imbalance across frontend nodes. -->
    <property name="phyMaxUseCount" value="1000" />

    <!-- Validation query (see "Enable validationQuery in newer Druid versions" below) -->
    <property name="validationQuery" value="select 1" />

    <!-- Monitoring statistics filter -->
    <property name="filters" value="stat" />
</bean>

Parâmetros principais

Parâmetro

Valor recomendado

Impacto de configuração incorreta

keepAlive

true

Se definido como false, conexões efêmeras geram sobrecarga e podem esgotar o pool sob alta demanda.

maxEvictableIdleTimeMillis

Valor baixo

Valores altos mantêm as conexões no mesmo nó de frontend e causam desequilíbrio de carga.

timeBetweenEvictionRunsMillis

2000 (padrão: 60000)

Intervalos longos impedem a detecção oportuna de conexões perdidas pelo Druid, resultando em erros.

testOnBorrow / testOnReturn

false (padrão)

Definir ambos como true adiciona latência de ida e volta a cada obtenção ou devolução. Ative apenas em cenários críticos ou redes instáveis.

phyMaxUseCount

1000

Sem essa configuração, uma única conexão persistente pode concentrar todo o tráfego e sobrecarregar um nó de frontend específico.

Ative validationQuery em versões recentes do Druid

Nas versões recentes do Druid, validationQuery é substituído por mysqlPing por padrão. Para usar validationQuery (select 1), defina a propriedade druid.mysql.usePingMethod como false após chamar init():

druidDataSource.init();

Properties properties = new Properties();
properties.setProperty("druid.mysql.usePingMethod", "false");
druidDataSource.setConnectProperties(properties);

Diagnosticar o pool de conexões

Obter um snapshot do pool

Chame dataSource.dump() para obter o estado atual do pool e das conexões individuais:

{
    CreateTime:"2022-06-01 15:28:10",
    ActiveCount:0,
    PoolingCount:2,
    CreateCount:2,
    DestroyCount:0,
    CloseCount:4,
    ConnectCount:4,
    Connections:[
        {
            ID:525571,
            ConnectTime:"2022-06-01 15:28:11",
            UseCount:0,
            LastActiveTime:"2022-06-01 15:28:11"
        },
        {ID:1263877414, ConnectTime:"2022-06-01 15:28:11", UseCount:4, LastActiveTime:"2022-06-01 15:28:11"}
    ]
}

Campo

Descrição

CreateTime

Momento de criação do pool de conexões

ActiveCount

Conexões atualmente em uso

PoolingCount

Conexões ociosas no pool

CreateCount

Total de conexões criadas, incluindo recriações após destruição

DestroyCount

Total de conexões destruídas por expiração ou erros

CloseCount

Total de chamadas a conn.close() (conexões devolvidas ao pool)

ConnectCount

Total de chamadas a dataSource.getConnection(); equivale à soma de todos os valores de UseCount

ID

Identificador interno da conexão

ConnectTime

Horário de estabelecimento da conexão física

UseCount

Número de vezes que a conexão foi obtida do pool

LastActiveTime

Última utilização da conexão; igual a ConnectTime se nunca utilizada

Verifique a configuração efetiva

Execute dataSource.getStatData() para confirmar se a configuração está ativa. Compare os valores retornados com a definição do bean: divergências indicam falha na aplicação de alguma configuração.

{
    InitialSize=1,
    MinIdle=2,
    MaxActive=3,
    TestOnBorrow=true,
    TestOnReturn=true,
    TestWhileIdle=true,
    KeepAlive=true,
    KeepAliveCheckCount=332,
    MinEvictableIdleTimeMillis=600000,
    MaxEvictableIdleTimeMillis=900000,
    MaxWait=6000,
    ...
}

Em produção, chame periodicamente getStatData() e dump() para garantir a validade das definições e o comportamento correto do pool. Você também pode validar as configurações pelos logs da aplicação.

Observações de uso

  • Sempre chame conn.close() assim que a consulta terminar para devolver a conexão ao pool. Se uma conexão utilizada não for devolvida e tornar-se inválida, o Druid não detectará essa invalidade.

  • Em ambientes de rede complexos (com gargalos de gateway, caminhos longos, instabilidade, altas taxas de retransmissão ou perda de pacotes), as conexões podem cair mesmo com o pool configurado corretamente. Implemente uma política de nova tentativa no código da aplicação para lidar com desconexões transitórias.