Dieser Artikel ist ein Spiegelartikel der maschinellen Übersetzung, bitte klicken Sie hier, um zum Originalartikel zu springen.

Ansehen: 9693|Antwort: 1

[Quelle] Spring Boot Datenbank-Verbindungspool HikariPool-Optimierung

[Link kopieren]
Veröffentlicht am 25.11.2021, 14:55:15 | | | |
Die Version Spring-Boot-2.0.0-M1 ändert den Standard-Datenbankverbindungspool vom tomcat-jdbc-Pool zu hikari, und beim Ausführen der Spring-Boot-Anwendung gibt die Konsole Folgendes aus.
2021-11-25 14:48:09.429 INFO 22236 --- [ main] com.zaxxer.hikari.HikariDataQuelle: HikariPool-1 - Start...
2021-11-25 14:48:09.813 INFO 22236 --- [main] com.zaxxer.hikari.HikariDataQuelle: HikariPool-1 - Start abgeschlossen.

Die Standardwerte für Hikaris Standardkonfiguration sind wie folgt:
{"connection-timeout":30000,"maximum-pool-size":10,"max-lifetime":1800000,"minimum-idle":10,"validation-timeout":5000,"idle-timeout":600000}

NameKonstruktor-StandardwerteDie Standardkonfiguration ist der Wert nach dem Validierenvalidatereset
minIdle-110minIdle<0 oder minIdle>maxPoolSize wird auf maxPoolSize zurückgesetzt
maxPoolSize-110Wenn maxPoolSize kleiner als 1 ist, wird es zurückgesetzt. Wenn minIdle<=0 auf DEFAULT_POOL_SIZE zurückgesetzt wird, beträgt es 10; Wenn minIdle>0, setzt er sich auf den Wert minIdle zurück
maxLifetimeMINUTES.toMillis(30) = 180000001800000Wenn sie nicht gleich 0 und weniger als 30 Sekunden ist, wird sie auf 30 Minuten zurückgesetzt
connectionTimeoutSECONDS.toMillis(30) = 30.00030000Ist es weniger als 250 ms, wird es auf 30 Sekunden zurückgesetzt
ValidierungTimeoutSECONDS.toMillis(5) = 50005000Ist es weniger als 250 ms, wird es auf 5 Sekunden zurückgesetzt
loginTimeout1030Math.max(1, (int) MILLISECONDS.toSeconds(500L + connectionTimeout)), was das Maximum von connectionTimeout+500ms ist, um die Anzahl der Sekunden in das Gesamt und 1 umzuwandeln
idleTimeoutMINUTES.toMillis(10) = 600000600000Wenn idleTimeout+1 Sekunde maxLifetime und maxLifetime >0 >, wird er auf 0 zurückgesetzt; Wenn idleTimeout!=0 und weniger als 10 Sekunden, wird es auf 10 Sekunden zurückgesetzt.
LeakDetectionThreshold00Wenn er größer als 0 ist und kein Einheitstest, wird weiter beurteilt, dass (leakDetectionThreshold < SECONDS.toMillis(2) oder (leakDetectionThreshold > maxLifetime & maxLifetime > 0) auf 0 zurückgesetzt wird. Das heißt, wenn es wirksam werden soll, muss es bei >0 sein, und es darf nicht weniger als 2 Sekunden sein, und wenn maxLifetime > 0 Stunden können nicht größer als maxLifetime sein
initializationFailTimeout11-
isAutoCommittruetrue-
isReadOnlyfalsefasle-
isAllowPoolSuspensionfalsefalse-
isIsolateInternalQueriesfalsefalse-
isRegisterMbeansfalsefalse-
versiegeltfalsetrueDiese Flagge gilt nach Beginn des Laufs und zeigt an, dass die Modifikation nicht mehr läuft
poolNamenullHikariPool-1-
Katalognullnull-
connectionInitSqlnullnull-
connectionTestQuerynullnull-
dataSourceClassNamenullnull-
Schemanullnull-
transactionIsolationNamenullnull-
DatenQuelle.nullnull-
dataQuelleEigenschaften{}{}-
threadFactorynullnull-
geplanter Testamentsvollstreckernullnull-
metricsTrackerFactorynullnull-
metricRegistrynullnull-
healthCheckRegistrynullnull-
healthCheckEigenschaften{}{}-

Bei der Durchführung eines Stresstests kann die Anwendung folgende Fehler melden:

Verursacht von: org.springframework.jdbc.CannotGetJdbcConnectionException: Konnte die JDBC-Verbindung nicht erhalten; Die verschachtelte Ausnahme ist java.sql.SQLTransientConnectionException: HikariPool-1 – Verbindung ist nicht verfügbar, Anfrage ist nach 30000 ms zeitlich abgelaufen.
        bei org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:82)
        bei org.mybatis.spring.transaction.SpringManagedTransaction.openConnection(SpringManagedTransaction.java:80)
        at org.mybatis.spring.transaction.SpringManagedTransaction.getConnection(SpringManagedTransaction.java:67)
        at org.apache.ibatis.executor.BaseExecutor.getConnection(BaseExecutor.java:337)
        at 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)
        at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156)
        at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:109)
        bei com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:81)
        at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:62)
        unter com.sun.proxy.$Proxy 224.query(Unbekannte Quelle)
        at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:151)
        ... 114 weitere
Verursacht durch: java.sql.SQLTransientConnectionException: HikariPool-1 - Verbindung ist nicht verfügbar, Anfrage läuft nach 30000 ms im Timeout.
        bei com.zaxxer.hikari.pool.HikariPool.createTimeoutException(HikariPool.java:695)
        bei com.zaxxer.hikari.pool.HikariPool.getConnection(HikariPool.java:197)
        bei com.zaxxer.hikari.pool.HikariPool.getConnection(HikariPool.java:162)
        unter com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:128)
        bei org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:158)
        at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:116)
        bei org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:79)
        ... 126 weitere


Fehler:Es gelang nicht, JDBC-Verbindung zu erhalten; Die verschachtelte Ausnahme ist java.sql.SQLTransientConnectionException: HikariPool-1 - Verbindung ist nicht verfügbar, Anfrage wird nach 30000 ms abgelaufen.

Der Controller gibt den HikariDataSource-Konfigurationsschnittstellencode wie folgt aus:

Optimieren Sie das Schema, erhöhen Sie die maximale Anzahl der Threads und erhöhen Sie die Anzahl der Verbindungen, die im Leerlauf gehalten werden, und ändern Sie die application.yml-Konfiguration wie folgt:

(Ende)




Vorhergehend:Der Unterschied zwischen getLastRowNum() und getLastCellNum() in POIs
Nächster:Vergleich der Testwerkzeuge LoadRunner und Jmeter
Veröffentlicht am 14.12.2022, 21:46:53 |
Lernen lernen
Verzichtserklärung:
Alle von Code Farmer Network veröffentlichten Software, Programmiermaterialien oder Artikel dienen ausschließlich Lern- und Forschungszwecken; Die oben genannten Inhalte dürfen nicht für kommerzielle oder illegale Zwecke verwendet werden, andernfalls tragen die Nutzer alle Konsequenzen. Die Informationen auf dieser Seite stammen aus dem Internet, und Urheberrechtsstreitigkeiten haben nichts mit dieser Seite zu tun. Sie müssen die oben genannten Inhalte innerhalb von 24 Stunden nach dem Download vollständig von Ihrem Computer löschen. Wenn Ihnen das Programm gefällt, unterstützen Sie bitte echte Software, kaufen Sie die Registrierung und erhalten Sie bessere echte Dienstleistungen. Falls es eine Verletzung gibt, kontaktieren Sie uns bitte per E-Mail.

Mail To:help@itsvse.com