Тази статия е огледална статия за машинен превод, моля, кликнете тук, за да преминете към оригиналната статия.

Изглед: 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 --- [основно] 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-iddle":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 ms, се нулира обратно на 30 секунди
валидацияТайм-аутSECONDS.toMillis(5) = 50005000Ако е по-малко от 250 ms, се нулира обратно на 5 секунди
loginTimeout1030Math.max(1, (int) MILLISECONDS.toSeconds(500L + connectionTimeout)), което е максимумът на connectionTimeout+500ms за преобразуване на броя секунди в цяло и 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 часа не може да е повече от maxLifetime
initializationFailTimeout11-
isAutoCommittruetrue-
isReadOnlyfalsefasle-
isAllowPoolSuspensionfalsefalse-
isIsolateInternalQueriesfalsefalse-
isRegisterMbeansfalsefalse-
ЗапечатаниfalsetrueТози флаг е валиден след старта на играта, което показва, че модификацията вече не се изпълнява
poolИмеnullHikariPool-1-
каталогnullnull-
connectionInitSqlnullnull-
connectionTestQuerynullnull-
dataSourceClassNamenullnull-
Схемаnullnull-
transactionIsolationNamenullnull-
dataSourcenullnull-
dataSourceProperties{}{}-
threadFactorynullnull-
scheduledИзпълнителnullnull-
metricsTrackerFactorynullnull-
metricRegistrynullnull-
healthCheckRegistrynullnull-
healthCheckProperties{}{}-

При провеждане на стрес тест приложението може да докладва следните грешки:

Причинено от: org.springframework.jdbc.CannotGetJdbcConnectionException: Не успях да получа JDBC връзка; Вложеното изключение е java.sql.SQLTransientConnectionException: HikariPool-1 - Връзката не е налична, заявката изтече след 30000ms.
        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 - Връзката не е налична, заявката изтече след 30000ms.
        на 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 връзка; вложеното изключение е java.sql.SQLTransientConnectionException: HikariPool-1 - Връзката не е налична, заявката е изтекла, изтичане след 30000ms.

Контролерът извежда конфигурационния код на интерфейса на HikariDataSource по следния начин:

Оптимизирайте схемата, увеличавайте максималния брой нишки и броя на връзките, които остават в покой, и модифицирайте конфигурацията на application.yml по следния начин:

(Край)




Предишен:Разликата между getLastRowNum() и getLastCellNum() в POI
Следващ:Сравнение на тестовите инструменти LoadRunner и Jmeter
Публикувано на 2022-12-14 21:46:53 |
Научи се да учиш
Отричане:
Целият софтуер, програмни материали или статии, публикувани от Code Farmer Network, са само за учебни и изследователски цели; Горното съдържание не трябва да се използва за търговски или незаконни цели, в противен случай потребителите ще понесат всички последствия. Информацията на този сайт идва от интернет, а споровете за авторски права нямат нищо общо с този сайт. Трябва напълно да изтриете горното съдържание от компютъра си в рамките на 24 часа след изтеглянето. Ако ви харесва програмата, моля, подкрепете оригинален софтуер, купете регистрация и получете по-добри услуги. Ако има нарушение, моля, свържете се с нас по имейл.

Mail To:help@itsvse.com