Эта статья является зеркальной статьёй машинного перевода, пожалуйста, нажмите здесь, чтобы перейти к оригиналу.

Вид: 9693|Ответ: 1

[Источник] Spring Boot Database Database Optimization 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 INFO 22236 --- [основной] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Начало...
2021-11-25 14:48:09.813 ИНФОРМАЦИЯ 22236 --- [основная] 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 часов не может быть больше максимального срока службы
initializationFailTimeout11-
isAutoCommittruetrue-
isReadOnlyfalsefasle-
isAllowPoolSuspensionfalsefalse-
isIsolateInternalQueriesfalsefalse-
isRegisterMbeansfalsefalse-
запечатанныйfalsetrueЭтот флаг актуален после запуска запуска, указывая на то, что модификация больше не выполняется
poolNameнедействительныйHikariPool-1-
каталогнедействительныйнедействительный-
connectionInitSqlнедействительныйнедействительный-
connectionTestQueryнедействительныйнедействительный-
dataSourceClassNameнедействительныйнедействительный-
схеманедействительныйнедействительный-
transactionIsolationNameнедействительныйнедействительный-
dataSourceнедействительныйнедействительный-
dataSourceProperties{}{}-
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(Источник неизвестен)
        at 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