Questo articolo è un articolo speculare di traduzione automatica, clicca qui per saltare all'articolo originale.

Vista: 9693|Risposta: 1

[Fonte] Ottimizzazione del pool di connessione con database Spring Boot HikariPool

[Copiato link]
Pubblicato il 25-11-2021 14:55:15 | | | |
La versione Spring-Boot-2.0.0-M1 cambia il pool di connessione database predefinito da tomcat jdbc pool a hikari, e quando si esegue l'applicazione spring boot, la console produce quanto segue
2021-11-25 14:48:09.429 INFO 22236 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Inizio...
2021-11-25 14:48:09.813 INFO 22236 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Inizio completato.

I valori predefiniti per la configurazione predefinita di Hikari sono i seguenti:
{"connection-timeout":30000,"maximum-pool-size":10,"max-lifetime":180000,"minimum-idle":10,"validation-timeout":5000,"idle-timeout":60000}

nomeImpostazioni predefinite del costruttoreLa configurazione predefinita è il valore dopo la validazionevalidatereset
minInattività-110minIdle<0 o minIdle>maxPoolSize, viene reimpostato a maxPoolSize
maxPoolSize-110Se maxPoolSize è inferiore a 1, viene resettato. Quando minIdle<=0 viene resettato a DEFAULT_POOL_SIZE, è 10; Se minIdle>0, si resetta al valore di minIdle
maxLifetimeMINUTES.toMillis(30) = 18000001800000Se non è uguale a 0 e meno di 30 secondi, verrà resettata a 30 minuti
connessione Tempo di uscitaSECONDS.toMillis(30) = 3000030000Se è inferiore a 250 ms, viene resettato a 30 secondi
validationTimeoutSECONDS.toMillis(5) = 50005000Se è inferiore a 250 ms, viene resettata a 5 secondi
loginTimeout1030Math.max(1, (int) MILLISECONDI.aSecondi(500L + connessione Tempo di scorta)), che è il massimo di connessione Tempo di scorta+500ms per convertire il numero di secondi in tutto e 1
idleTimeoutMINUTES.toMillis(10) = 600000600000Se inattivitàTimeout+1 secondo > maxLifetime e maxLifetime >0, verrà resettato a 0; Se IdleTimeout!=0 e meno di 10 secondi, viene azzerato a 10 secondi
Soglia di rilevamento delle perdite00Se è superiore a 0 e non è un test unitario, si valuta inoltre che (leakDetectionThreshold < SECONDS.toMillis(2) o (leakDetectionThreshold > maxLifetime & & maxLifetime > 0) verranno resettati a 0. Cioè, se deve entrare in vigore, deve essere >0, non può essere inferiore a 2 secondi, e quando maxLifetime > 0 ore non può essere superiore al maxLifetime
inizializzazioneFailTimeout11-
isAutoCommittruetrue-
isReadOnlyfalseFasle-
isAlpermettiSospensionefalsefalse-
isIsolateInternalQueriesfalsefalse-
isRegisterMbeansfalsefalse-
sigillatofalsetrueQuesto flag è vero dopo l'inizio della corsa, indicando che la modifica non è più in esecuzione
Nome poolnulloHikariPool-1-
catalogonullonullo-
connectionInitSQLnullonullo-
connectionTestQuerynullonullo-
dataFonteNomeClassenullonullo-
schemanullonullo-
transactionIsolationNamenullonullo-
dataSourcenullonullo-
dataProprietàSorgente{}{}-
threadFactorynullonullo-
Esecutore programmatonullonullo-
metricsTrackerFactorynullonullo-
metricRegistrynullonullo-
HealthCheckRegistrynullonullo-
HealthCheckProperties{}{}-

Durante l'esecuzione di un test di stress, l'applicazione può segnalare i seguenti errori:

Causato da: org.springframework.jdbc.CannotGetJdbcConnectionException: Non è riuscito a ottenere JDBC Connection; eccezione annidata è java.sql.SQLTransientConnectionException: HikariPool-1 - La connessione non è disponibile, richiesta con tempi di scadenza dopo 30000ms.
        at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:82)
        su org.mybatis.spring.transaction.SpringManagedTransaction.openConnection(SpringManagedTransaction.java:80)
        su org.mybatis.spring.transaction.SpringManagedTransaction.getConnection(SpringManagedTransaction.java:67)
        su org.apache.ibatis.executor.BaseExecutor.getConnection(BaseExecutor.java:337)
        su org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:86)
        at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:62)
        at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:325)
        su org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156)
        at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:109)
        su com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:81)
        at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:62)
        su com.sun.proxy.$Proxy 224.query(Fonte sconosciuta)
        su org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:151)
        ... Altri 114
Causato da: java.sql.SQLTransientConnectionException: HikariPool-1 - La connessione non è disponibile, la richiesta è stata scaduta dopo 30000ms.
        su com.zaxxer.hikari.pool.HikariPool.createTimeoutException(HikariPool.java:695)
        su com.zaxxer.hikari.pool.HikariPool.getConnection(HikariPool.java:197)
        su com.zaxxer.hikari.pool.HikariPool.getConnection(HikariPool.java:162)
        su 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)
        ... Altri 126


Errore:Non è riuscito a ottenere la connessione JDBC; eccezione annidata è java.sql.SQLTransientConnectionException: HikariPool-1 - La connessione non è disponibile, la richiesta è in scadenza dopo 30000ms.

Il Controller invia il codice dell'interfaccia di configurazione HikariDataSource come segue:

Ottimizzare lo schema, aumentare il numero massimo di thread e aumentare il numero di connessioni inattive, e modificare la configurazione application.yml come segue:

(Fine)




Precedente:La differenza tra getLastRowNum() e getLastCellNum() nei POI
Prossimo:Confronto degli strumenti di test LoadRunner e Jmeter
Pubblicato il 14-12-2022 21:46:53 |
Impara a imparare
Disconoscimento:
Tutto il software, i materiali di programmazione o gli articoli pubblicati dalla Code Farmer Network sono destinati esclusivamente all'apprendimento e alla ricerca; I contenuti sopra elencati non devono essere utilizzati per scopi commerciali o illegali, altrimenti gli utenti dovranno sostenere tutte le conseguenze. Le informazioni su questo sito provengono da Internet, e le controversie sul copyright non hanno nulla a che fare con questo sito. Devi eliminare completamente i contenuti sopra elencati dal tuo computer entro 24 ore dal download. Se ti piace il programma, ti preghiamo di supportare software autentico, acquistare la registrazione e ottenere servizi autentici migliori. In caso di violazione, vi preghiamo di contattarci via email.

Mail To:help@itsvse.com