이 글은 기계 번역의 미러 문서이며, 원본 기사로 바로 이동하려면 여기를 클릭해 주세요.

보기: 9693|회답: 1

[출처] Spring Boot 데이터베이스 연결 풀 HikariPool 최적화

[링크 복사]
2021-11-25 14:55:15에 게시됨 | | | |
Spring-Boot-2.0.0-M1 버전은 기본 데이터베이스 연결 풀을 tomcat jdbc 풀에서 hikari로 변경하며, spring boot 애플리케이션을 실행할 때 콘솔은 다음과 같은 출력을 냅니다
2021-11-25 14:48:09.429 정보 22236 --- [메인] com.zaxxer.hikari.Hikari데이터출처 : HikariPool-1 - 시작...
2021-11-25 14:48:09.813 정보 22236 --- [ 메인] com.zaxxer.hikari.hikari 데이터출처 : HikariPool-1 - 시작 완료.

히카리의 기본 구성에 대한 기본 값은 다음과 같습니다:
{"connection-timeout":30000,"maximum-pool-size":10,"max-lifetime":1800000,"minimum-idle":10,"validation-timeout":5000,"idle-timeout":600000}

이름구성자 기본 설정기본 구성은 검증 후 값입니다validatereset
미니들-110minIdle<0 또는 minIdle>maxPoolSize로 초기화되면 maxPoolSize로 초기화됩니다
maxPoolSize-110maxPoolSize가 1 미만이면 초기화됩니다. minIdle<=0을 DEFAULT_POOL_SIZE으로 초기화하면 10이 됩니다; minIdle>0이면 minIdle 값으로 초기화됩니다
맥스라이프타임MINUTES.toMillis(30) = 180000018000000이 아니고 30초 미만이면 30분으로 리셋됩니다
연결타임아웃SECONDS.toMillis(30) = 3000030000250ms 미만이면 30초로 초기화됩니다
검증Timeout초.투밀리스(5) = 50005000250ms 미만이면 5초로 초기화됩니다
로그인타임아웃1030Math.max(1, (int) MILLISECONDS.toSeconds(500L + connectionTimeout)), 이는 최대 연결타임아웃+500ms를 초 수를 전체 및 1로 변환하는 데 해당합니다.
idleTimeoutMINUTES.toMillis(10) = 600000600000만약 대기 타임아웃+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보다 길어서는 안 됩니다
초기화FailTimeout11-
isAutoCommittruetrue-
isReadOnlyfalse파슬-
isAllowPoolSuspensionfalsefalse-
isIsolateInternalQueriesfalsefalse-
isRegisterMbeansfalsefalse-
밀봉falsetrue이 플래그는 실행 시작 후 발생하며, 수정이 더 이상 실행되지 않음을 나타냅니다
풀네임히카리풀-1-
카탈로그-
connectionInitSQL-
connectionTestQuery-
dataSourceClassName-
스키마-
transactionIsolationName-
데이터소스-
dataSourceProperties{}{}-
스레드팩토리-
scheduledexecutor-
metricsTrackerFactory-
메트릭레지스트리-
건강검사 등록부-
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)
        org.apache.ibatis.executor.BaseExecutor.getConnection(BaseExecutor.java:337)
        org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:86)
        org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:62)
        org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:325)
        org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156)
        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 - 연결이 불가하며, 요청이 30,000ms 후 타임아웃됨.
        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 구성을 다음과 같이 수정합니다:

(끝)




이전의:POI에서 getLastRowNum()과 getLastCellNum()의 차이점
다음:LoadRunner와 Jmeter 테스트 도구 비교
2022-12-14 21:46:53에 게시됨 |
배우기 위해 배우세요
면책 조항:
Code Farmer Network에서 발행하는 모든 소프트웨어, 프로그래밍 자료 또는 기사는 학습 및 연구 목적으로만 사용됩니다; 위 내용은 상업적 또는 불법적인 목적으로 사용되지 않으며, 그렇지 않으면 모든 책임이 사용자에게 부담됩니다. 이 사이트의 정보는 인터넷에서 가져온 것이며, 저작권 분쟁은 이 사이트와는 관련이 없습니다. 위 내용은 다운로드 후 24시간 이내에 컴퓨터에서 완전히 삭제해야 합니다. 프로그램이 마음에 드신다면, 진짜 소프트웨어를 지원하고, 등록을 구매하며, 더 나은 진짜 서비스를 받아주세요. 침해가 있을 경우 이메일로 연락해 주시기 바랍니다.

Mail To:help@itsvse.com