스프링

 

 

 

 

autoCommit

이 속성은 풀에서 반환된 연결의 기본 자동 커밋 동작을 제어합니다. 부울 값입니다. 기본값: 참

 

 

connectionTimeout  접속 시간 초과

이 속성은 클라이언트(귀하)가 풀에서 연결을 기다리는 최대 시간(밀리초)을 제어합니다. 연결을 사용할 수 없는 상태에서 이 시간을 초과하면 SQLException이 발생합니다. 허용 가능한 최저 연결 제한 시간은 250ms입니다. 기본값: 30000(30초)

 

 

idleTimeout  유휴 시간 초과

이 속성은 연결이 풀에서 유휴 상태로 있을 수 있는 최대 시간을 제어합니다. 이 설정은 minimumIdle이 maximumPoolSize 미만으로 정의된 경우에만 적용됩니다. 풀이 minimumIdle 연결에 도달하면 유휴 연결이 만료되지 않습니다. 연결이 유휴 상태로 종료되는지 여부는 최대 +30초의 변동과 +15초의 평균 변동이 적용됩니다. 이 시간 초과 전에는 연결이 유휴 상태로 만료되지 않습니다. 값 0은 유휴 연결이 풀에서 제거되지 않음을 의미합니다. 최소 허용 값은 10000ms(10초)입니다. 기본값: 600000(10분)

 

 

maxLifetime  최대 수명

이 속성은 풀에서 연결의 최대 수명을 제어합니다. 사용 중인 연결은 절대 폐기되지 않으며 닫힐 때만 제거됩니다. 풀에서 대량 소멸을 방지하기 위해 연결별로 약간의 음수 감쇠가 적용됩니다. 이 값을 설정하는 것이 좋습니다. 연결 시간 제한이 있는 데이터베이스 또는 인프라보다 몇 초 더 짧아야 합니다. 값 0은 물론 idleTimeout 설정에 따라 최대 수명(무한 수명)이 없음을 나타냅니다. 기본값: 1800000(30분)

 

 

 

 

connectionTestQuery 연결 테스트 쿼리

드라이버가 JDBC4를 지원하는 경우 이 속성을 설정하지 않는 것이 좋습니다. 이는 JDBC4 Connection.isValid() API를 지원하지 않는 "레거시" 드라이버용입니다. 이것은 데이터베이스에 대한 연결이 여전히 활성 상태인지 확인하기 위해 풀에서 연결이 제공되기 직전에 실행되는 쿼리입니다. 다시 말하지만, 이 속성 없이 풀을 실행해 보십시오. HikariCP는 드라이버가 JDBC4와 호환되지 않는 경우 오류를 기록하여 알려줍니다. 기본값: 없음

 

 

 

 

minimumIdle  최소유휴

이 속성은 HikariCP가 풀에서 유지하려는 최소 유휴 연결 수를 제어합니다. 유휴 연결이 이 값 아래로 떨어지고 풀의 총 연결이 maximumPoolSize 미만인 경우 HikariCP는 추가 연결을 빠르고 효율적으로 추가하기 위해 최선을 다합니다. 그러나 최대 성능과 스파이크 요구에 대한 응답성을 위해 이 값을 설정하지 않고 대신 HikariCP가 고정 크기 연결 풀로 작동하도록 허용하는 것이 좋습니다. 기본값: maximumPoolSize와 동일

 

 

 

maximumPoolSize   최대 풀 크기

이 속성은 유휴 및 사용 중인 연결을 모두 포함하여 풀이 도달할 수 있는 최대 크기를 제어합니다. 기본적으로 이 값은 데이터베이스 백엔드에 대한 실제 연결의 최대 수를 결정합니다. 이에 대한 합리적인 값은 실행 환경에 따라 가장 잘 결정됩니다. 풀이 이 크기에 도달하고 사용 가능한 유휴 연결이 없으면 getConnection()에 대한 호출이 시간 초과되기 전에 최대 connectionTimeout 밀리초 동안 차단됩니다. 수영장 크기 조정에 대해 읽으십시오. 기본값: 10

 

 

 

metricRegistry   메트릭 레지스트리

이 속성은 프로그래밍 구성 또는 IoC 컨테이너를 통해서만 사용할 수 있습니다. 이 속성을 사용하면 풀에서 다양한 메트릭을 기록하는 데 사용할 Codahale/Dropwizard MetricRegistry의 인스턴스를 지정할 수 있습니다. 자세한 내용은 메트릭 위키 페이지를 참조하세요. 기본값: 없음

 

 

 

healthCheckRegistry   건강체크레지스트리

이 속성은 프로그래밍 구성 또는 IoC 컨테이너를 통해서만 사용할 수 있습니다. 이 속성을 사용하면 현재 상태 정보를 보고하기 위해 풀에서 사용할 Codahale/Dropwizard HealthCheckRegistry의 인스턴스를 지정할 수 있습니다. 자세한 내용은 상태 확인 위키 페이지를 참조하세요. 기본값: 없음

 

 

 

poolName  풀 이름

이 등록 정보는 연결 풀에 대한 사용자 정의 이름을 나타내며 풀 및 풀 구성을 식별하기 위해 주로 로깅 및 JMX 관리 콘솔에 나타납니다. 기본값: 자동 생성



 

 

prepStmtCacheSize

이는 MySQL 드라이버가 연결당 캐시할 준비된 명령문의 수를 설정합니다. 기본값은 보수적인 25입니다. 250-500 사이로 설정하는 것이 좋습니다.

 

 

prepStmtCacheSqlLimit

이것은 드라이버가 캐시할 준비된 SQL 문의 최대 길이입니다. MySQL 기본값은 256입니다. 경험상, 특히 Hibernate와 같은 ORM 프레임워크에서 이 기본값은 생성된 명령문 길이의 임계값보다 훨씬 낮습니다. 권장 설정은 2048입니다.

 

 

cachePrepStmts

기본적으로 캐시가 실제로 비활성화된 경우 위의 매개변수 중 어느 것도 영향을 미치지 않습니다. 이 매개변수를 true로 설정해야 합니다.

 

 

 

useServerPrepStmts

최신 버전의 MySQL은 서버 측 준비된 명령문을 지원하므로 상당한 성능 향상을 제공할 수 있습니다. 이 속성을 true로 설정합니다.

 

 

 

HikariCP의 일반적인 MySQL 구성

jdbcUrl=jdbc:mysql://localhost:3306/simpsons
username=test
password=test
dataSource.cachePrepStmts=true
dataSource.prepStmtCacheSize=250
dataSource.prepStmtCacheSqlLimit=2048
dataSource.useServerPrepStmts=true
dataSource.useLocalSessionState=true
dataSource.rewriteBatchedStatements=true
dataSource.cacheResultSetMetadata=true
dataSource.cacheServerConfiguration=true
dataSource.elideSetAutoCommits=true
dataSource.maintainTimeStats=false

 

 

 

HikariCP Datasource 설정 부분

  • 기본적으로 Datasource를 이용한 설정 방법
  • Springboot v2.x 이상부터 tomcat jdbc가 아닌 hikariCP 기본으로 지원

 

 

 

스프링부트 지원 properties를 이용한 설정 방법

 

##########################################################################
############### Hikari -Setting ##########################################

spring.datasource.hikari.minimumIdle=2
spring.datasource.hikari.maximumPoolSize=10
spring.datasource.hikari.idleTimeout=120000

spring.datasource.hikari.data-source-properties.cachePrepStmts=true
spring.datasource.hikari.data-source-properties.prepStmtCacheSize=250
spring.datasource.hikari.data-source-properties.prepStmtCacheSqlLimit=2048
spring.datasource.hikari.data-source-properties.useServerPrepStmts=true

#Mysql
spring.datasource.hikari.connectionTestQuery=select 1 from  dual
spring.datasource.hikari.connectionTimeout=300000
spring.datasource.hikari.leakDetectionThreshold=300000

#Oracle
#spring.datasource.hikari.connectionTestQuery=select 1 from sys.dual

####################  Hikari -Setting ######################################
############################################################################

 

 

 

 

@Bean
@ConfigurationProperties(prefix="spring.datasource.hikari")
public HikariConfig hikariConfig() {
	return new HikariConfig();
}

 

 

 

 

 

java 설정 방법

@Bean
public HikariConfig hikariConfig() {
	HikariConfig hikariConfig = new HikariConfig();
	hikariConfig.setJdbcUrl(jdbcUrl);
	hikariConfig.setUsername(username);
	hikariConfig.setPassword(password);
	hikariConfig.setMaximumPoolSize(10);

	hikariConfig.addDataSourceProperty("cachePrepStmts", "true");
	hikariConfig.addDataSourceProperty("prepStmtCacheSize", "250");
	hikariConfig.addDataSourceProperty("prepStmtCacheSqlLimit", "2048");
	hikariConfig.addDataSourceProperty("useServerPrepStmts", "true");
	return hikariConfig;
}

 

 

 

xml 설정 방법

 

	<bean id="hikariConfig" class="com.zaxxer.hikari.HikariConfig">
		<property name="driverClassName" value="${driver}" />
		<property name="jdbcUrl" value="${url}" />
		<property name="username" value="${user}" />
		<property name="password" value="${password}" />
		
		<property name="minimumIdle" value="5" />
        <property name="maximumPoolSize" value="10" />
        <property name="connectionTestQuery" value="select 1 from sys.dual" />
		<!-- 5분마다 요청 -->
		<property name="connectionTimeout" value="300000" />
		<property name="leakDetectionThreshold" value="300000" />
	</bean>
<!-- connectionTimeout=30 000 (30초), 
connectionTimeout=60 000 (60초) 이면
실제 90초 마다 idle connection 이 갱신됨

 -->
 
	<bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource" destroy-method="close">
		<constructor-arg ref="hikariConfig" />
	</bean>

 

 

 

 

 

 

 

HikariCP + MySQL 설정 시

  • 출처: https://github.com/brettwooldridge/HikariCP/wiki/MySQL-Configuration

MySQL 권장 설정 일부

 

spring

 

about author

PHRASE

Level 60  라이트

오는 정이 있어야 가는 정이 있다 , 남이 나에게 잘해 주면 이쪽에서도 그만큼 상대편에게 잘해 주게 된다는 말.

댓글 ( 4)

댓글 남기기

작성