JDBC Connection Pool Validação

Paul Stoner:

Eu experimentei uma falha com o meu aplicativo no outro dia e eu preciso entender como evitar isto no futuro.

Temos um aplicativo em execução web baseado em Java no Tomcat 7. O aplicativo ligado a várias fontes de dados diferentes, incluindo um banco de dados Oracle.

Aqui estão os detalhes, o servidor de banco de dados Oracle caiu e teve que ser reiniciado. O meu entendimento simples me diz que isso teria cortado as conexões do aplicativo para o banco de dados, e de fato os usuários relataram erros na aplicação.

A fonte de dados Oracle está configurado em sever.xml do Tomcat como um recurso GlobalNaming:

<Resource name="datasource"
        auth="Container"
        type="javax.sql.DataSource"
        factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
        ....
        initialSize="4"
        minIdle="2"
        maxIdle="8"
        maxActive="8"
        maxAge="28800000"
        maxWait="30000"
        testOnBorrow="false"
        testOnReturn="false"
        testWhileIdle="false"
        validationQuery="SELECT 1 FROM dual"
        validationQueryTimeout="10"
        validationInterval="600000"
        timeBetweenEvictionRunsMillis="60000"
        minEvictableIdleTimeMillis="900000"
        removeAbandoned="true"
        removeAbandonedTimeout="60"
        logAbandoned="true"
        jmxEnabled="true" />

Então aqui é o que eu entendo sobre a validação da conexão.

  • Conexões não são validadas enquanto ocioso (testWhileIdle = false), quando emprestado (testOnBorrow = false), quando retornou (testOnReturn = false)
  • O PoolSweeper está habilitado porque timeBetweenEvictionRunsMillis> 0, removeAbandoned é verdade, e removeAbandonedTimeout> 0

O que me confunde é a inclusão da consulta de validação eo validationInterval> 0. Uma vez que todos os testes são desativado, a vassoura piscina, então, usar a consulta de validação para verificar as conexões? Ou é a consulta de validação irrelevante?

Então, quando o servidor de banco de dados caiu, eu acredito que o pool de conexão não teria tentado conexões restabelecer porque não existem testes de validação habilitado. Na minha opinião, tinha testOnBorrow foi ativado, em seguida, quando o servidor de banco de dados voltou-se teria sido estabelecido conexões válidas ea aplicação web (o que significa tomcat) não teria exigido um reinício.

Eu tenho uma compreensão correta de como funciona a validação de conexão?

Paul Wasilewski:

Vamos dar uma olhada na parte relevante da sua configuração para evitar conexões inválidas em sua piscina.

maxAge="28800000"

As conexões independentemente se válido ou não será mantida aberta durante 8 horas. Após 8 horas a conexão é fechada e uma nova conexão será estabelecida se solicitado, e nenhuma ligação gratuita está disponível na piscina. [1]

testOnBorrow="false"
testOnReturn="false"
testWhileIdle="false"

A conexão na piscina não será testado se ele é válido quando ou enquanto ele foi emprestado, voltou e ocioso. [1]

validationInterval="600000"

Este imóvel tem nenhum efeito uma vez que todos os testes de conexão estão definidas para falsa. Esse intervalo define quando é necessária uma ligação para ser testado. No seu exemplo, uma conexão será testado a cada 10 minutos no caso de uma propriedade de teste seria definido como verdadeiro. [1]

Uma conexão inválida pode ficar aberto a 8 horas com sua configuração atual. Para ativar os testes de validação de conexões abertas que você tem que definir pelo menos uma propriedade de teste ( testOnBorrow, testOnReturn, testWhileIdle) para true.

Por favor note, em caso de validationInterval="600000"um teste de ligação / validação será feita a cada 10 minutos. Assim, uma conexão inválida poderia ser de até 10 minutos disponíveis na piscina independentemente de qual propriedade de teste está definida.

Para mais informações sobre as propriedades individuais favor, dê uma olhada [1]: Apache Tomcat 7: The Connection Tomcat JDBC Piscina .

Acho que você gosta

Origin http://43.154.161.224:23101/article/api/json?id=215824&siteId=1
Recomendado
Clasificación