Este artículo es un artículo espejo de traducción automática, por favor haga clic aquí para saltar al artículo original.

Vista: 9693|Respuesta: 1

[Fuente] Optimización de la base de datos de base de datos Spring Boot para HikariPool

[Copiar enlace]
Publicado el 25-11-2021 14:55:15 | | | |
La versión Spring-Boot-2.0.0-M1 cambia el conjunto de conexiones de base de datos predeterminado de tomcat jdbc pool a hikari, y al ejecutar la aplicación spring boot, la consola genera lo siguiente
2021-11-25 14:48:09.429 INFO 22236 --- [ principal] com.zaxxer.hikari.HikariDataSource: HikariPool-1 - Iniciando...
2021-11-25 14:48:09.813 INFO 22236 --- [ principal] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Inicio completado.

Los valores por defecto para la configuración predeterminada de Hikari son los siguientes:
{"Tiempo de Espera":30000,"Tamaño Máximo de Pool":10,"Vida Máxima Vida":180000,"Mínima-Inactivo":10,"Tiempo de Validación":5000,"Tiempo de Reposo":60000}

nombreValores predeterminados del constructorLa configuración predeterminada es el valor posterior a la validaciónvalidatereset
MinDle-110minIdle<0 o minIdle>maxPoolSize, se reinicia a maxPoolSize
maxPoolSize-110Si maxPoolSize es menor que 1, se reinicia. Cuando el mínimo de reposo<=0 se reinicia a DEFAULT_POOL_SIZE, es 10; Si minIdle>0, se reinicia al valor de minIdle
maxLifetimeMINUTES.toMillis(30) = 18000001800000Si no es igual a 0 y es menor a 30 segundos, se reiniciará a 30 minutos
conexiónTiempo de esperaSECONDS.toMillis(30) = 3000030000Si es inferior a 250 ms, se reinicia a 30 segundos
validaciónTimeoutSECONDS.toMillis(5) = 50005000Si es inferior a 250 ms, se reinicia a 5 segundos
loginTiempo de salida1030Math.max(1, (int) MILISEGUNDOS.aSegundos(500L + conexiónTiempo de espera)), que es el máximo de conexiónTiempo de salida+500ms para convertir el número de segundos a la totalidad y 1
idleTimeoutMINUTES.toMillis(10) = 600000600000Si el tiempo de espera de reposo+1 segundo > maxLifetime y maxLifetime >0, se reiniciará a 0; Si IdleTimeout!=0 y es menos de 10 segundos, se reinicia a 10 segundos
Umbral de detecciónFuga00Si es mayor que 0 y no es una prueba unitaria, se juzga además que (leakDetectionThreshold < SECONDS.toMillis(2) o (leakDetectionThreshold > maxLifetime & & maxLifetime > 0) se restablecerán a 0. Es decir, si va a hacer efecto, debe ser >0, y no puede ser menor de 2 segundos, y cuando maxLifetime > 0 horas no pueden ser mayores que maxLifetime
inicializaciónFalloTiempo de espera11-
isAutoCommittruetrue-
isReadOnlyfalseFasle-
isAlpermitSuspensión de la piscinafalsefalse-
isIsolateInternalQueriesfalsefalse-
isRegisterMbeansfalsefalse-
selladofalsetrueEsta bandera es cierta después de que comienza la carrera, indicando que la modificación ya no está en funcionamiento
poolNamenuloHikariPool-1-
catálogonulonulo-
connectionInitSQLnulonulo-
connectionTestQuerynulonulo-
dataSourceClassNamenulonulo-
esquemanulonulo-
transactionIsolationNamenulonulo-
dataSourcenulonulo-
dataFuentePropiedades{}{}-
ThreadFactorynulonulo-
AlbaceaProgramadonulonulo-
métricasTrackerFactorynulonulo-
metricRegistrynulonulo-
RegistroSaludCheckRegistradonulonulo-
SaludComprobaciónPropiedades{}{}-

Al realizar una prueba de estrés, la aplicación puede reportar los siguientes errores:

Causado por: org.springframework.jdbc.CannotGetJdbcConnectionException: No se logró obtener la conexión JDBC; La excepción anidada es java.sql.SQLTransientConnectionException: HikariPool-1 - La conexión no está disponible, la solicitud expira tras 30000ms.
        at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:82)
        en org.mybatis.spring.transaction.SpringManagedTransaction.openConnection(SpringManagedTransaction.java:80)
        en org.mybatis.spring.transaction.SpringManagedTransaction.getConnection(SpringManagedTransaction.java:67)
        en org.apache.ibatis.executor.BaseExecutor.getConnection(BaseExecutor.java:337)
        en org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:86)
        en org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:62)
        at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:325)
        en org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156)
        en org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:109)
        en com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:81)
        at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:62)
        en com.sun.proxy.$Proxy 224.query(Fuente desconocida)
        en org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:151)
        ... 114 más
Causado por: java.sql.SQLTransientConnectionException: HikariPool-1 - La conexión no está disponible, la solicitud expiró tras 30000 ms.
        en com.zaxxer.hikari.pool.HikariPool.createTimeOutException(HikariPool.java:695)
        en com.zaxxer.hikari.pool.HikariPool.getConnection(HikariPool.java:197)
        en com.zaxxer.hikari.pool.HikariPool.getConnection(HikariPool.java:162)
        en 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 más


Error:No se logró obtener la conexión JDBC; La excepción anidada es java.sql.SQLTransientConnectionException: HikariPool-1 - La conexión no está disponible, la solicitud expiró tras 30000ms.

El controlador genera el código de la interfaz de configuración de HikariDataSource de la siguiente manera:

Optimizar el esquema, aumentar el número máximo de hilos y aumentar el número de conexiones inactivas, y modificar la configuración application.yml de la siguiente manera:

(Fin)




Anterior:La diferencia entre getLastRowNum() y getLastCellNum() en los POI
Próximo:Comparación de las herramientas de prueba LoadRunner y Jmeter
Publicado el 14-12-2022 21:46:53 |
Aprende a aprender
Renuncia:
Todo el software, materiales de programación o artículos publicados por Code Farmer Network son únicamente para fines de aprendizaje e investigación; El contenido anterior no se utilizará con fines comerciales o ilegales; de lo contrario, los usuarios asumirán todas las consecuencias. La información de este sitio proviene de Internet, y las disputas de derechos de autor no tienen nada que ver con este sitio. Debes eliminar completamente el contenido anterior de tu ordenador en un plazo de 24 horas desde la descarga. Si te gusta el programa, por favor apoya el software genuino, compra el registro y obtén mejores servicios genuinos. Si hay alguna infracción, por favor contáctanos por correo electrónico.

Mail To:help@itsvse.com