Cet article est un article miroir de traduction automatique, veuillez cliquer ici pour accéder à l’article original.

Vue: 9693|Répondre: 1

[Source] Optimisation du pool de connexion de la base de données Spring Boot HikariPool

[Copié le lien]
Publié le 25-11-2021 à 14:55:15 | | | |
La version Spring-Boot-2.0.0-M1 modifie le pool de connexion par défaut de la base de données de tomcat jdbc pool à hikari, et lors de l’exécution de l’application spring boot, la console affiche les éléments suivants
2021-11-25 14:48:09.429 INFOS 22236 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Démarrage...
2021-11-25 14:48:09.813 INFOS 22236 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Démarrage terminé.

Les valeurs par défaut de la configuration par défaut de Hikari sont les suivantes :
{"connexion-timeout » :30000,"maximum-pool-size » :10,"max-lifetime » :180000,"minimum-idle » :10,"validation-timeout » :5000,"idle-timeout » :60000}

nomPar défaut du constructeurLa configuration par défaut est la valeur après validationvalidatereset
minIntime-110minIdle<0 ou minIdle>maxPoolSize, il est réinitialisé en maxPoolSize
maxPoolSize-110Si maxPoolSize est inférieur à 1, il est réinitialisé. Lorsque minIdle<=0 est réinitialisé à DEFAULT_POOL_SIZE, il est 10 ; Si minIdle>0, il se réinitialise à la valeur de minIdle
maxLifetimeMINUTES.toMillis(30) = 18000001800000Si ce n’est pas égal à 0 et inférieur à 30 secondes, il sera réinitialisé à 30 minutes
connexion Temps d’arrêtSECONDS.toMillis(30) = 3000030000Si c’est inférieur à 250 ms, il est réinitialisé à 30 secondes
validationTimeoutSECONDS.toMillis(5) = 50005000Si c’est inférieur à 250 ms, il est réinitialisé à 5 secondes
connexionTemps d’attente1030Math.max(1, (int) MILLISECONDES.àSecondes(500L + connexionTimeout)), qui est le maximum de connexionTemps d’attente+500ms pour convertir le nombre de secondes en tout et 1
idleTimeoutMINUTES.toMillis(10) = 600000600000Si le temps d’inactivité+1 seconde > maxLifetime et maxLifetime >0, il sera réinitialisé à 0 ; Si IdleTimeout !=0 et moins de 10 secondes, il est réinitialisé à 10 secondes
SeuilDétection de fuite00Si c’est supérieur à 0 et qu’il n’est pas un test unitaire, on juge en outre que (leakDetectionThreshold < SECONDS.toMillis(2) ou (leakDetectionThreshold > maxLifetime & & maxLifetime > 0) sera réinitialisé à 0. C’est-à-dire que, pour qu’il entre en vigueur, il doit être >0, et il ne peut pas être inférieur à 2 secondes, et lorsque maxLifetime > 0 heure ne peut pas dépasser le maxDurée de vie
initialisationFailDélai11-
isAutoCommittruetrue-
isReadOnlyfalseFasle-
isAllowPoolSuspensionfalsefalse-
isIsolateInternalQueriesfalsefalse-
isRegisterMbeansfalsefalse-
scelléfalsetrueCe drapeau est vrai après le début de la course, indiquant que la modification n’est plus en cours d’exécution
Nom de la piscinezéroHikariPool-1-
cataloguezérozéro-
connectionInitSQLzérozéro-
connexionTestQueryzérozéro-
dataSourceClassNamezérozéro-
schémazérozéro-
transactionIsolationNamezérozéro-
dataSourcezérozéro-
dataSourceProperties{}{}-
ThreadFactoryzérozéro-
Exécuteur programmézérozéro-
metricsTrackerFactoryzérozéro-
metricRegistryzérozéro-
Registre de Contrôle de la Santézérozéro-
HealthCheckProperties{}{}-

Lors d’un test de résistance, l’application peut signaler les erreurs suivantes :

Causé par : org.springframework.jdbc.CannotGetJdbcConnectionException : Échec à obtenir la connexion JDBC ; exception imbriquée est java.sql.SQLTransientConnectionException : HikariPool-1 - La connexion n’est pas disponible, la requête expire après 30000 ms.
        at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java :82)
        sur org.mybatis.spring.transaction.SpringManagedTransaction.openConnection(SpringManagedTransaction.java :80)
        sur org.mybatis.spring.transaction.SpringManagedTransaction.getConnection(SpringManagedTransaction.java :67)
        at org.apache.ibatis.executor.BaseExecutor.getConnection(BaseExecutor.java :337)
        sur 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)
        sur org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java :156)
        at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java :109)
        at com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java :81)
        at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java :62)
        sur com.sun.proxy.$Proxy 224.query(Source inconnue)
        sur org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java :151)
        ... 114 autres
Causé par : java.sql.SQLTransientConnectionException : HikariPool-1 - La connexion n’est pas disponible, la requête expire après 30000 ms.
        sur com.zaxxer.hikari.pool.HikariPool.createTimeOutException(HikariPool.java :695)
        sur com.zaxxer.hikari.pool.HikariPool.getConnection(HikariPool.java :197)
        sur com.zaxxer.hikari.pool.HikariPool.getConnection(HikariPool.java :162)
        sur 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)
        ... 126 autres


Erreur:Échec à obtenir la connexion JDBC ; exception imbriquée est java.sql.SQLTransientConnectionException : HikariPool-1 - La connexion n’est pas disponible, la requête expire après 30000ms.

Le contrôleur affiche le code de configuration HikariDataSource comme suit :

Optimisez le schéma, augmentez le nombre maximal de threads et le nombre de connexions immobilisées, et modifiez la configuration application.yml comme suit :

(Fin)




Précédent:La différence entre getLastRowNum() et getLastCellNum() dans les POI
Prochain:Comparaison des outils de test LoadRunner et Jmeter
Publié le 14-12-2022 à 21:46:53 |
Apprendre à apprendre
Démenti:
Tous les logiciels, supports de programmation ou articles publiés par Code Farmer Network sont uniquement destinés à l’apprentissage et à la recherche ; Le contenu ci-dessus ne doit pas être utilisé à des fins commerciales ou illégales, sinon les utilisateurs assumeront toutes les conséquences. Les informations sur ce site proviennent d’Internet, et les litiges de droits d’auteur n’ont rien à voir avec ce site. Vous devez supprimer complètement le contenu ci-dessus de votre ordinateur dans les 24 heures suivant le téléchargement. Si vous aimez le programme, merci de soutenir un logiciel authentique, d’acheter l’immatriculation et d’obtenir de meilleurs services authentiques. En cas d’infraction, veuillez nous contacter par e-mail.

Mail To:help@itsvse.com