Ця стаття є дзеркальною статтею машинного перекладу, будь ласка, натисніть тут, щоб перейти до оригінальної статті.

Вид: 9693|Відповідь: 1

[Джерело] Оптимізація пулу з'єднань бази даних Spring Boot HikariPool

[Копіювати посилання]
Опубліковано 2021-11-25 14:55:15 | | | |
Версія Spring-Boot-2.0.0-M1 змінює стандартний пул підключення до бази даних з tomcat jdbc pool на hikari, і при запуску spring boot консоль виводить наступне
2021-11-25 14:48:09.429 ІНФО 22236 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Починаємо...
2021-11-25 14:48:09.813 ІНФО 22236 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Початок завершено.

Значення за замовчуванням для стандартної конфігурації Hikari такі:
{"connection-timeout":30000,"maximum-pool-size":10,"max-life":1800000,"minimum-idle":10,"validation-timeout":5000,"idle-timeout":600000}

Ім'яКонструктори за замовчуваннямСтандартна конфігурація — це значення після валідаціїvalidatereset
minIdle-110minIdle<0 або minIdle>maxPoolSize, скидається до maxPoolSize
maxPoolSize-110Якщо maxPoolSize менше 1, він скидається. Коли minIdle<=0 скидається до DEFAULT_POOL_SIZE, це 10; Якщо minIdle>0, він скидається до значення minIdle
maxLifetimeMINUTES.toMillis(30) = 18000001800000Якщо він не дорівнює 0 і менше 30 секунд, його скидають до 30 хвилин
з'єднанняТайм-аутSECONDS.toMillis(30) = 3000030000Якщо менше 250 мс, його скидають до 30 секунд
validationTimeoutSECONDS.toMillis(5) = 50005000Якщо менше 250 мс, його скидають до 5 секунд
loginTimeout1030Math.max(1, (int) MILLISECONDS.toSeconds(500L + connectionTimeout)), що є максимальним часом з'єднанняTimeout + 500 мс для перетворення кількості секунд у цілу та 1
IdleTimeoutMINUTES.toMillis(10) = 600000600000Якщо idleTimeout+1 секунда > maxLifetime і maxLifetime >0, він скидається до 0; Якщо idleTimeout!=0 і менше 10 секунд, скидається до 10 секунд
leakDetectionThreshold00Якщо він перевищує 0 і не є модульним тестом, додатково оцінюється, що (leakDetectionThreshold < SECONDS.toMillis(2) або (leakDetectionThreshold > maxLifetime && maxLifetime > 0) буде скинуто до 0. Тобто, якщо він має набути чинності, він має бути >0, і не може бути менше 2 секунд, і коли maxLifetime > 0 годин не може бути більшим за maxLife.
initializationFailTimeout11-
isAutoCommittruetrue-
isReadOnlyfalsefasle-
isAllowPoolSuspensionfalsefalse-
isIsolateInternalQueriesfalsefalse-
isRegisterMbeansfalsefalse-
ЗапечатанийfalsetrueЦей прапорець діє після початку запуску, що означає, що модифікація більше не виконується
poolНазванульHikariPool-1-
каталогнульнуль-
connectionInitSqlнульнуль-
connectionTestQueryнульнуль-
dataSourceClassNameнульнуль-
Схеминульнуль-
transactionIsolationNameнульнуль-
dataSourceнульнуль-
dataSourceВластивості{}{}-
threadFactoryнульнуль-
scheduledВиконавецьнульнуль-
metricsTrackerFactoryнульнуль-
metricRegistryнульнуль-
healthCheckRegistryнульнуль-
healthCheckВластивості{}{}-

Під час проведення стрес-тесту додаток може повідомляти про такі помилки:

Причина: org.springframework.jdbc.CannotGetJdbcConnectionException: Не вдалося отримати JDBC Connection; Вкладений виняток — java.sql.SQLTransientConnectionException: HikariPool-1 — З'єднання недоступне, запит закінчується після 30000 мс.
        at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:82)
        на org.mybatis.spring.transaction.SpringManagedTransaction.openConnection(SpringManagedTransaction.java:80)
        на org.mybatis.spring.transaction.SpringManagedTransaction.getConnection(SpringManagedTransaction.java:67)
        at org.apache.ibatis.executor.BaseExecutor.getConnection(BaseExecutor.java:337)
        на 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)
        на com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:81)
        на org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:62)
        за адресою com.sun.proxy.$Proxy 224.query(Невідоме джерело)
        на org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:151)
        ... Ще 114
Причина: java.sql.SQLTransientConnectionException: HikariPool-1 - З'єднання недоступне, запит закінчився після 30000 мс.
        на com.zaxxer.hikari.pool.HikariPool.createTimeoutException(HikariPool.java:695)
        на com.zaxxer.hikari.pool.HikariPool.getConnection(HikariPool.java:197)
        на com.zaxxer.hikari.pool.HikariPool.getConnection(HikariPool.java:162)
        за адресою 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


Помилка:Не вдалося отримати JDBC Connection; вкладений виняток — java.sql.SQLTransientConnectionException: HikariPool-1 — З'єднання недоступне, запит закінчується після 30000 мс.

Контролер виводить конфігураційний код інтерфейсу HikariDataSource наступним чином:

Оптимізуйте схему, збільште максимальну кількість потоків і кількість з'єднань, що залишаються без руху, а також змініть конфігурацію application.yml наступним чином:

(Кінець)




Попередній:Різниця між getLastRowNum() і getLastCellNum() у POI
Наступний:Порівняння інструментів для тестування LoadRunner та Jmeter
Опубліковано 2022-12-14 21:46:53 |
Вчитися вчитися
Застереження:
Усе програмне забезпечення, програмні матеріали або статті, опубліковані Code Farmer Network, призначені лише для навчання та досліджень; Вищезазначений контент не повинен використовуватися в комерційних чи незаконних цілях, інакше користувачі несуть усі наслідки. Інформація на цьому сайті надходить з Інтернету, і спори щодо авторських прав не мають до цього сайту. Ви повинні повністю видалити вищезазначений контент зі свого комп'ютера протягом 24 годин після завантаження. Якщо вам подобається програма, будь ласка, підтримуйте справжнє програмне забезпечення, купуйте реєстрацію та отримайте кращі справжні послуги. Якщо є будь-яке порушення, будь ласка, зв'яжіться з нами електронною поштою.

Mail To:help@itsvse.com