Bu makale makine çevirisi ayna makalesidir, orijinal makaleye geçmek için lütfen buraya tıklayın.

Görünüm: 9693|Yanıt: 1

[Kaynak] Spring Boot veritabanı bağlantı havuzu HikariPool optimizasyonu

[Bağlantıyı kopyala]
2021-11-25 tarihinde 14:55:15 tarihinde yayınlandı | | | |
Spring-Boot-2.0.0-M1 sürümü, varsayılan veritabanı bağlantı havuzunu tomcat jdbc havuzundan hikari'ye değiştirir ve spring boot uygulamasını çalıştırırken konsol aşağıdaki çıktıyı verir
2021-11-25 14:48:09.429 INFO 22236 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Başlatılıyor...
2021-11-25 14:48:09.813 INFO 22236 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Başlatma tamamlandı.

Hikari'nin varsayılan konfigürasyonu için varsayılan değerler şunlardır:
{"connection-timeout":30000,"maximum-pool-size":10,"max-lifetime":1800000,"minimum-idle":10,"validation-timeout":5000,"idle-timeout":600000}

adÜretici varsayılan hatalarıVarsayılan yapılandırma, doğrulamadan sonraki değerdir.validatereset
minIdle-110minIdle<0 veya minIdle>maxPoolSize, maxPoolSize'e sıfırlanır
maxPoolSize-110MaxPoolSize 1'den küçükse, sıfırlanır. minIdle<=0 DEFAULT_POOL_SIZE'a sıfırlandığında 10'dur; minIdle>0 ise, minIdle değerine sıfırlanır
maxLifetimeDAKIKALAR.Millis(30) = 180000018000000 değilse ve 30 saniyeden kısa ise, tekrar 30 dakikaya sıfırlanır
connectionTimeoutSECONDS.toMillis(30) = 3000030000250 ms'den küçükse, 30 saniyeye geri sıfırlanır
doğrulamaZaman AşımıSECONDS.toMillis(5) = 50005000250 ms'den azsa, tekrar 5 saniyeye sıfırlanır
loginTimeout1030Math.max(1, (int) MILLISECONDS.toSeconds(500L + connectionTimeout)), bu da connectionTimeout+500ms'nin maksimum sınırıdır ve saniye sayısını tam ve 1'e dönüştürmek için
idleTimeoutDAKIKALAR.toMillis(10) = 600000600000idleTimeout+1 saniye > maxLifetime ve maxLifetime >0 olursa, sıfırlanır; idleTimeout!=0 ve 10 saniyeden azsa, 10 saniyeye sıfırlanır
sızıntıAlgılamaEşiği000'dan büyükse ve bir birim testi değilse, ayrıca (leakDetectionThreshold < SECONDS.toMillis(2) veya (leakDetectionThreshold > maxLifetime && maxLifetime > 0) sıfırlanacağı da değerlendirilir. Yani, bu işlem etkili olacaksa >0 olmalı ve 2 saniyeden az olamaz, maxLifetime ise > 0 saat, maxLifetime'dan büyük olamaz.
initializationFailTimeout11-
isAutoCommittruetrue-
isReadOnlyfalseFasle-
isAllowPoolSuspensionfalsefalse-
isIsolateInternalQueriesfalsefalse-
isRegisterMbeansfalsefalse-
MühürlüfalsetrueBu bayrak çalışma başladıktan sonra geçerlidir ve modifikasyonun artık çalışmadığını gösterir
havuzAdısıfırHikariHavuz-1-
katalogsıfırsıfır-
connectionInitSqlsıfırsıfır-
connectionTestQuerysıfırsıfır-
dataSourceClassNamesıfırsıfır-
şemasıfırsıfır-
transactionIsolationNamesıfırsıfır-
dataSourcesıfırsıfır-
dataSourceProperties{}{}-
threadFactorysıfırsıfır-
scheduledExecutorsıfırsıfır-
metriklerTrackerFactorysıfırsıfır-
metricRegistrysıfırsıfır-
healthCheckRegistrysıfırsıfır-
healthCheckProperties{}{}-

Stres testi yapılırken, uygulama aşağıdaki hataları bildirebilir:

Nedeni: org.springframework.jdbc.CannotGetJdbcConnectionException: JDBC Bağlantısı alınamadı; iç içe istisna java.sql.SQLTransientConnectionException: HikariPool-1 - Bağlantı mevcut değil, istek 30000ms'ten sonra zaman aşımına dayandı.
        org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:82) adresinde
        org.mybatis.spring.transaction.SpringManagedTransaction.openConnection(SpringManagedTransaction.java:80) adresinde
        org.mybatis.spring.transaction.SpringManagedTransaction.getConnection(SpringManagedTransaction.java:67) adresinde
        org.apache.ibatis.executor.BaseExecutor.getConnection(BaseExecutor.java:337) adresinde
        org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:86) adresinde
        org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:62) adresinde
        org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:325) adresinde
        org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156) adresinde
        org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:109) adresinde
        com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:81) adresinde
        org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:62) adresinde
        com.sun.proxy.$Proxy 224.query(bilinmeyen kaynak) adresinde
        at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:151)
        ... 114 tane daha
Nedeni: java.sql.SQLTransientConnectionException: HikariPool-1 - Bağlantı mevcut değil, istek 30000ms'den sonra zaman aşımına dayandı.
        at com.zaxxer.hikari.pool.HikariPool.createTimeoutException(HikariPool.java:695)
        com.zaxxer.hikari.pool.HikariPool.getConnection(HikariPool.java:197) adresinde
        com.zaxxer.hikari.pool.HikariPool.getConnection(HikariPool.java:162) adresinden
        at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:128)
        org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:158) adresinde
        org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:116) adresinde
        org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:79) adresinde
        ... 126 tane daha


Hata:JDBC Bağlantısı'nı elde edememiştir; iç içe istisna java.sql.SQLTransientConnectionException: HikariPool-1 - Bağlantı mevcut değil, istek 30000ms'den sonra zaman aşımına dayandı.

Kontrolör, HikariDataSource yapılandırma arayüzü kodunu aşağıdaki şekilde çıkarır:

Şemayı optimize edin, maksimum iş parçacıklarını artırın ve boşta tutulan bağlantı sayısını artırın, application.yml yapılandırmasını aşağıdaki şekilde değiştirin:

(Son)




Önceki:POI'lerde getLastRowNum() ile getLastCellNum() arasındaki fark
Önümüzdeki:Test araçları LoadRunner ve Jmeter'in karşılaştırması
2022-12-14 tarihinde yayınlandı 21:46:53 |
Öğrenmeyi öğren
Feragatname:
Code Farmer Network tarafından yayımlanan tüm yazılım, programlama materyalleri veya makaleler yalnızca öğrenme ve araştırma amaçları içindir; Yukarıdaki içerik ticari veya yasa dışı amaçlarla kullanılamaz, aksi takdirde kullanıcılar tüm sonuçları ödemelidir. Bu sitedeki bilgiler internetten alınmakta olup, telif hakkı anlaşmazlıklarının bu siteyle hiçbir ilgisi yoktur. Yukarıdaki içeriği indirmeden sonraki 24 saat içinde bilgisayarınızdan tamamen silmelisiniz. Programı beğendiyseniz, lütfen orijinal yazılımı destekleyin, kayıt satın alın ve daha iyi orijinal hizmetler alın. Herhangi bir ihlal olursa, lütfen bizimle e-posta yoluyla iletişime geçin.

Mail To:help@itsvse.com