Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Problema do pool de conexão


Aqui está o fluxo de eventos para ilustrar o que está acontecendo:
  1. Uma conexão é solicitada e usada pelo chamador (aplicativo ou pool de conexões)
  2. O chamador mantém uma referência a ele para que a conexão possa ser reutilizada
  3. O chamador passa por um período de inatividade (por exemplo, um sistema dev durante a noite ou um sistema de controle de qualidade no fim de semana).
  4. Uma vez que a conexão com o banco de dados não está em uso, o banco de dados considera a conexão inativa. Por estar ocioso, após um certo período de tempo (o padrão do MySQL é 8 horas), o banco de dados fecha a conexão.
  5. O chamador ainda tem um identificador para a conexão e, quando o chamador tenta usar a conexão novamente, descobre desagradavelmente que a conexão foi encerrada.

A razão pela qual autoReconnect=true funciona, e que o pool testando a validade da conexão funciona, é que você está instruindo o sistema chamador a testar a conexão para esta situação e tentar novamente se esta situação acontecer.

Quanto a saber se a consulta de validação afetará o desempenho:Em teoria, está usando uma conexão para fazer algo. Na prática, algo é tão trivial que seu efeito é desprezível no contexto de todo o seu sistema.

[EDITAR]

Nesse caso, o Apache DBCP é o pool de conexão que está pendurado na conexão, mas você NÃO deseja que o DBCP feche a conexão após cada chamada. O objetivo do pool de conexões é manter uma conexão pronta para a próxima chamada porque criar conexões é caro. Os objetos de conexão mantidos pelo pool são apoiados por conexões de banco de dados reais, e o banco de dados é aquele que fecha essa conexão real após o período de tempo limite ocioso. Observe que o tempo limite para fechar conexões inativas é configurado no banco de dados, não no pool de conexões. Por causa disso, o DBCP não tem como saber se a conexão foi fechada ou não, a menos que ele realmente tente se conectar a ela. É por isso que você precisa de uma consulta de validação.

Para obter mais informações sobre como configurar o DBCP, consulte a página de configuração e os documentos de API .