Este artigo é um artigo espelhado de tradução automática, por favor clique aqui para ir para o artigo original.

Vista: 9693|Resposta: 1

[Fonte] Otimização para pool de conexão de banco de dados Spring Boot

[Copiar link]
Postado em 25-11-2021 14:55:15 | | | |
A versão Spring-Boot-2.0.0-M1 altera o pool padrão de conexão de banco de dados do pool jdbc tomcat para hikari, e ao executar o aplicativo spring boot, o console gera o seguinte
2021-11-25 14:48:09.429 INFO 22236 --- [ principal] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Iniciando...
2021-11-25 14:48:09.813 INFORMAÇÕES 22236 --- [ principal] com.zaxxer.hikari.HikariDataFonte : HikariPool-1 - Início concluído.

Os valores padrão para a configuração padrão do Hikari são os seguintes:
{"connection-timeout":30000,"maximum-pool-size":10,"max-lifetime":180000,"minimum-idle":10,"validation-timeout":5000,"idle-timeout":60000}

nomePadrões do construtorA configuração padrão é o valor após validaçãovalidatereset
MinOcioso-110minIdle<0 ou minIdle>maxPoolSize, é resetado para maxPoolSize
maxPoolSize-110Se maxPoolSize for menor que 1, ele é resetado. Quando o minIdle<=0 é resetado para DEFAULT_POOL_SIZE, é 10; Se minIdle>0, ele reinicia para o valor de minIdle
maxLifetimeMINUTES.toMillis(30) = 18000001800000Se não for igual a 0 e for menor que 30 segundos, será resetado para 30 minutos
conexãoTempo ExpiradoSECONDS.toMillis(30) = 3000030000Se for menor que 250 ms, é resetado para 30 segundos
validaçãoTimeoutSECONDS.toMillis(5) = 50005000Se estiver abaixo de 250 ms, ele é resetado para 5 segundos
loginTimeout1030Math.max(1, (int) MILISSEGUNDOS.paraSegundos(500L + conexãoTempoExpiração)), que é o máximo de conexãoTempo de espera+500ms para converter o número de segundos para o todo e 1
idleTimeoutMINUTES.toMillis(10) = 600000600000Se idleTimeout+1 segundo > maxLifetime e maxLifetime >0, será resetado para 0; Se idleTimeout!=0 e menos de 10 segundos, ele é resetado para 10 segundos
LimiarDedeção de Vazamento00Se for maior que 0 e não for um teste unitário, julga-se ainda que (leakDetectionThreshold < SECONDS.toMillis(2) ou (leakDetectionThreshold > maxLifetime & maxLifetime > 0) será resetado para 0. Ou seja, se entrar em vigor, deve ser >0, não pode ser inferior a 2 segundos, e quando maxLifetime > 0 horas não pode ser maior que o máximo de Vida
inicializaçãoFalhaTempo de Saída11-
isAutoCommittruetrue-
isReadOnlyfalseFasle-
isAlallow PoolSuspensionfalsefalse-
isIsolateInternalQueriesfalsefalse-
isRegisterMbeansfalsefalse-
seladofalsetrueEssa bandeira é verdadeira após o início da corrida, indicando que a modificação não está mais em execução
Nome da piscinazeroHikariPool-1-
catálogozerozero-
connectionInitSQLzerozero-
connectionTestQueryzerozero-
dataSourceClassNamezerozero-
esquemazerozero-
transaçãoIsolamentoNomezerozero-
dataSourcezerozero-
dataFontePropriedades{}{}-
threadFactoryzerozero-
Executor Programadozerozero-
métricasTrackerFactoryzerozero-
metricRegistryzerozero-
HealthCheckRegistryzerozero-
HealthCheckPropriedades{}{}-

Ao realizar um teste de estresse, a aplicação pode relatar os seguintes erros:

Causado por: org.springframework.jdbc.CannotGetJdbcConnectionException: Não conseguiu obter a conexão JDBC; exceção aninhada é java.sql.SQLTransientConnectionException: HikariPool-1 - Conexão não disponível, solicitação expirada após 30000ms.
        at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:82)
        em org.mybatis.spring.transaction.SpringManagedTransaction.openConnection(SpringManagedTransaction.java:80)
        em org.mybatis.spring.transaction.SpringManagedTransaction.getConnection(SpringManagedTransaction.java:67)
        em org.apache.ibatis.executor.BaseExecutor.getConnection(BaseExecutor.java:337)
        em org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:86)
        em org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:62)
        at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:325)
        em org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156)
        em org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:109)
        em com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:81)
        at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:62)
        em com.sun.proxy.$Proxy 224.query(Fonte Desconhecida)
        em org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:151)
        ... Mais 114
Causado por: java.sql.SQLTransientConnectionException: HikariPool-1 - Conexão não disponível, solicitação com tempo de expiração após 30000ms.
        em com.zaxxer.hikari.pool.HikariPool.createTimeOutException(HikariPool.java:695)
        em com.zaxxer.hikari.pool.HikariPool.getConnection(HikariPool.java:197)
        em com.zaxxer.hikari.pool.HikariPool.getConnection(HikariPool.java:162)
        em com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:128)
        at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:158)
        at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:116)
        at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:79)
        ... Mais 126


Erro:Não conseguiu obter a conexão JDBC; exceção aninhada é java.sql.SQLTransientConnectionException: HikariPool-1 - Conexão não disponível, solicitação expirada após 30000ms.

O Controlador gera o código da interface de configuração do HikariDataSource da seguinte forma:

Otimize o esquema, aumente o número máximo de threads e o número de conexões inativas, e modifique a configuração application.yml da seguinte forma:

(Fim)




Anterior:A diferença entre getLastRowNum() e getLastCellNum() em POIs
Próximo:Comparação das ferramentas de teste LoadRunner e Jmeter
Postado em 2022-12-14 21:46:53 |
Aprenda a aprender
Disclaimer:
Todo software, material de programação ou artigos publicados pela Code Farmer Network são apenas para fins de aprendizado e pesquisa; O conteúdo acima não deve ser usado para fins comerciais ou ilegais, caso contrário, os usuários terão todas as consequências. As informações deste site vêm da Internet, e disputas de direitos autorais não têm nada a ver com este site. Você deve deletar completamente o conteúdo acima do seu computador em até 24 horas após o download. Se você gosta do programa, por favor, apoie um software genuíno, compre o registro e obtenha serviços genuínos melhores. Se houver qualquer infração, por favor, entre em contato conosco por e-mail.

Mail To:help@itsvse.com