Ten artykuł jest lustrzanym artykułem tłumaczenia maszynowego, kliknij tutaj, aby przejść do oryginalnego artykułu.

Widok: 9693|Odpowiedź: 1

[Źródło] Optymalizacja pod pulą połączeń bazy danych Spring Boot HikariPool

[Skopiuj link]
Opublikowano 2021-11-25 o 14:55:15 | | | |
Wersja Spring-Boot-2.0.0-M1 zmienia domyślną pulę połączeń bazy danych z puli tomcat jdbc na hikari, a podczas uruchamiania aplikacji spring boot konsola generuje następujące wyniki
2021-11-25 14:48:09.429 INFO 22236 --- [ główny] com.zaxxer.hikari.HikariDataŹródło: HikariPool-1 - Start...
2021-11-25 14:48:09.813 INFO 22236 --- [ main] com.zaxxer.hikari.HikariDataŹródło: HikariPool-1 - Start zakończony.

Domyślne wartości domyślnej konfiguracji Hikari są następujące:
{"Limit-Połączenia":30000,"Maksymalny-Rozmiar-Puli-Wielkość":10,"Maksymalny czas życia":180000,"Minimalny czas bezczynności":10,"Limit-walidacji":5000,"Przerwa bezczynności":600000}

nazwaDomyślne ustawienia konstruktoraDomyślna konfiguracja to wartość po walidacjivalidatereset
minIdle-110minIdle<0 lub minIdle>maxPoolSize, jest resetowany do maxPoolSize
maxPoolSize-110Jeśli maxPoolSize jest mniejszy niż 1, jest resetowany. Gdy minIdle<=0 zostanie zresetowane do DEFAULT_POOL_SIZE, wynosi 10; Jeśli minIdle>0, resetuje się do wartości minIdle
maxLifetimeMINUTES.toMillis(30) = 18000001800000Jeśli nie jest równy 0 i trwa mniej niż 30 sekund, zostaje zresetowany do 30 minut
łącznośćTimeoutSECONDS.toMillis(30) = 3000030000Jeśli jest mniej niż 250 ms, jest resetowany do 30 sekund
WalidacjaTimeoutSECONDS.toMillis(5) = 50005000Jeśli jest mniej niż 250 ms, jest resetowany do 5 sekund
loginTimeout1030Math.max(1, (int) MILLISECONDS.toSeconds(500L + connectionTimeout)), co jest maksymalną liczbą łącznościTimeout+500ms do przeliczenia liczby sekund na całość i 1
idleTimeoutMINUTES.toMillis(10) = 600000600000Jeśli idleTimeout+1 sekunda > maxLifetime i maxLifetime >0, zostanie zresetowany do 0; Jeśli idleTimeout!=0 i mniej niż 10 sekund, resetuje się do 10 sekund
leakDetectionThreshold00Jeśli jest większa niż 0 i nie jest testem jednostkowym, dodatkowo ocenia się, że (leakDetectionThreshold < SECONDS.toMillis(2) lub (leakDetectionThreshold > maxLifetime & maxLifetime > 0) zostanie zresetowane do 0. To znaczy, jeśli ma zadziałać, musi być >0 i nie może być krótsza niż 2 sekundy, a gdy maxLifetime > 0 godzin nie może być większe niż maxLifetime
InicjalizacjaCzas Awarii11-
isAutoCommittruetrue-
isReadOnlyfalseFasle-
isAllowPoolSuspensionfalsefalse-
isIsolateInternalQueriesfalsefalse-
isRegisterMbeansfalsefalse-
ZamkniętefalsetrueTa flaga jest prawdziwa po rozpoczęciu przebiegu, co oznacza, że modyfikacja już nie jest aktywna
poolNazwazeroHikariPool-1-
katalogzerozero-
connectionInitSqlzerozero-
connectionTestQueryzerozero-
dataSourceClassNamezerozero-
schematzerozero-
transactionIsolationNamezerozero-
dataSourcezerozero-
dataSourceProperties{}{}-
threadFactoryzerozero-
planowanyWykonawcazerozero-
metricsTrackerFactoryzerozero-
metricRegistryzerozero-
healthCheckRegistryzerozero-
healthCheckProperties{}{}-

Podczas przeprowadzania testu obciążeniowego aplikacja może zgłaszać następujące błędy:

Spowodowane przez: org.springframework.jdbc.CannotGetJdbcConnectionException: Nie udało się uzyskać połączenia JDBC; zagnieżdżony wyjątek to java.sql.SQLTransientConnectionException: HikariPool-1 - Połączenie nie jest dostępne, żądanie wygasło po 30000ms.
        at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:82)
        na org.mybatis.spring.transaction.SpringManagedTransaction.openConnection(SpringManagedTransaction.java:80)
        na org.mybatis.spring.transaction.SpringManagedTransaction.getConnection(SpringManagedTransaction.java:67)
        pod adresem 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)
        na org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156)
        na org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:109)
        at com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:81)
        na org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:62)
        na com.sun.proxy.$Proxy 224.query(Nieznane Źródło)
        at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:151)
        ... Jeszcze 114
Spowodowane przez: java.sql.SQLTransientConnectionException: HikariPool-1 - Połączenie niedostępne, żądanie wygasło po 30000ms.
        na stronie com.zaxxer.hikari.pool.HikariPool.createTimeoutException(HikariPool.java:695)
        pod adresem com.zaxxer.hikari.pool.HikariPool.getConnection(HikariPool.java:197)
        pod adresem com.zaxxer.hikari.pool.HikariPool.getConnection(HikariPool.java:162)
        at 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)
        ... Jeszcze 126


Błąd:Nie udało się uzyskać połączenia JDBC; zagnieżdżony wyjątek to java.sql.SQLTransientConnectionException: HikariPool-1 - Połączenie nie jest dostępne, żądanie zakończone po 30000 ms.

Kontroler generuje kod interfejsu konfiguracyjnego HikariDataSource w następujący sposób:

Zoptymalizuj schemat, zwiększ maksymalną liczbę wątków i zwiększ liczbę połączeń bezczynnych, a konfigurację application.yml zmodyfikuj w następujący sposób:

(Koniec)




Poprzedni:Różnica między getLastRowNum() a getLastCellNum() w POI
Następny:Porównanie narzędzi testowych LoadRunner i Jmeter
Opublikowano 2022-12-14 21:46:53 |
Naucz się uczyć
Zrzeczenie się:
Całe oprogramowanie, materiały programistyczne lub artykuły publikowane przez Code Farmer Network służą wyłącznie celom edukacyjnym i badawczym; Powyższe treści nie mogą być wykorzystywane do celów komercyjnych ani nielegalnych, w przeciwnym razie użytkownicy ponoszą wszelkie konsekwencje. Informacje na tej stronie pochodzą z Internetu, a spory dotyczące praw autorskich nie mają z nią nic wspólnego. Musisz całkowicie usunąć powyższą zawartość z komputera w ciągu 24 godzin od pobrania. Jeśli spodoba Ci się program, wspieraj oryginalne oprogramowanie, kup rejestrację i korzystaj z lepszych, autentycznych usług. W przypadku naruszenia praw prosimy o kontakt mailowy.

Mail To:help@itsvse.com