티스토리 뷰
1. maximum-pool-size : 100개 2. connection-time out : 30,000 (30초) 3. max-lifetime : 240,000 (240초) 4분 (커넥션을 생성후 커넥션을 닫고 풀에서 제거한 뒤 커넥션을 새로 생성한다) 4. - keepalive TIME 5. minimum-idle : 10개 6. idle - timeout : 200,000 (200초) 3분 30초 7. validation - timeout = 5,000 ( 5초) 1. maximum-pool-size: Connection Pool에 유지 가능한 최대 커넥션 개수 2.connection-timeout: Pool에서 Connection을 구할 때 대기시간, 대기시간안에 구하지 못하면 Exception 3. max-lifetime: Connection의 최대 유지 가능 시간 4. keepalive TIME : 커넥션이 살아있는지 확인하는 주기 5. minimum-idle: Connection Pool에 유지 가능한 최소 커넥션 개수 6. idle-timeout: Connection이 Poll에서 유휴상태(사용하지 않는 상태)로 남을 수 있는 최대 시간 |
Hikari ConnectionPool 튜닝
1. 최대 커넥션 개수 - maximumPoolSize
1. ConnectionPool이 제공할 수 있는 최대 커넥션 개수를 말한다.
이는 사용중인 Connection과 유휴 커넥션을 합친 값을 의미한다.
2. 설정하기 전에 목표 TPS 값이 필요하다.
단순 계산식으로 아래처럼 계산할 수 있다.
[목표 TPS 설정 ] 동시 접속자 2만명, 2초
최대 TPS = 1개의 커넥션의 초당 처리 요청 개수 * 동시 커넥션 개수
동시 커넥션 개수
= 최대 TPS / 1개 커넥션의 초당 요청 처리개수
= 최대 TPS / (1초 / 쿼리 실행 시간)
최대 개수 고려사항
SlowQuery를 잡아야한다. 평균 이상으로 실행 시간이 튀는 개수나 비율 검토.
쿼리 실행시간이 2이 평균인데 , 2초 걸리는 쿼리가 순간적으로 5개가 발생하면?
- 2초 / 2초 * 5개 : 0.2 TPS
느린 쿼리를 염두하고 최대 개수를 높여야 한다.
물론 부하테스트를 진행하면 조금 더 정확한 값을 얻어낼 수 있다.
테스트 환경
- Baremetal 서버 : CPU 40core , Memory 512GB
maxPoolSize = 10 / TPS 368
maxPoolSize = 50 / TPS 336
2. 최대 커넥션 대기시간 - ConnectionTimeOut
풀에서 커넥션을 구하기 위해 대기하는 시간이다.
최대 커넥션만큼 사용 중일 때 커넥션을 가져오려고 했을 때 대기하는 시간이다.
기본값은 30초인데 너무 길다.
사용자는 응답없는 상태로 30초를 기다려야한다.
따라서 기본 값 대신에 0.5~3초 이내로 설정하는 것을 권장한다.
응답이 없는 것보다는 빨리 에러 화면이라도 응답해주는게 낫기 때문이다.
3. 커넥션 최대 유지 시간 - maxLifeTime
커넥션을 생성한 이후에 이 시간이 지나면 커넥션을 닫고 풀에서 제거한 뒤 커넥션을 새로 생성한다.
- 기본 규칙
- 네트워크나 DB 관련 설정 값보다 작은 값 사용
ex) 네트워크 장비의 최대 TCP 커넥션 유지 시간
- 네트워크나 DB 관련 설정 값보다 작은 값 사용
만약, 이 값이 관련 설정보다 크면 이미 유효하지 않은 커넥션이 풀에 남게 된다. 요청이 유효하지 않은 커넥션을 받아오면 유효성 검증과중 중에 커넥션을 새로 생성한다. 트래픽 몰리는 시점일 경우 성능이 저하된다.
예시
DB의 TCP 유지시간이 10분인데 maxLifeTime을 15분으로 주게되면 ConnectionPool에서는 해당 커넥션이 5분동안 유효하지 않은 상태로 살아있게 된다. 해당 Connection을 사용할 때 검사하고 유효하지 않은 경우 커넥션을 생성한다.
4. 커넥션 확인 주기 - keepAliveTime
커넥션이 살아있는지 확인하는 주기
- Idle 커넥션에 대해 커넥션 확인
- 유효하지 않은 커넥션 풀에서 제거
- 제거하 뒤 커넥션을 새로 생성
- 기본 규칙
- 네트워크나 DB의 관련 설정값보다 작은 값 사용
ex) DB의 미활동 커넥션 대기 시간
- 네트워크나 DB의 관련 설정값보다 작은 값 사용
예를 들어 DB에서 10분동안 안쓰는 커넥션을 끊는다면 그것보다 작은 값을 사용하자.
5. 최소 유휴 커넥션 - minimumIdle
풀에서 유지할 최소 유휴 커넥션 개수
기본값은 maximumPoolSize와 동일하고 HikariCP는 이 값을 바꾸지 않는 것을 권장한다.
용도는 트래픽 적은 시간대 DB 자원 사용을 주링기 위함이다.
1. maximumPoolSize가 10이고 minimumIdle이 5라면 처음에는 5개의 커넥션만 만들어진다.
2. 동시에 요청이 4개가 오면 idleConnection의 개수는 1개가 된다.
minimulIdle은 요청이 없을 경우 유지하는 connection을 말하는 것 같다. 개인적으로 minimumConnection이 더 나은 워딩이라고 생각한다.
6. 최대 유휴 시간 - idelTimeOut
사용되지 않고 풀에 머무를 수 있는 시간
풀에서 이 시간동안 머무른 커넥션은 종료하고 풀에서 제거
minimuIdle을 따로 설정했을 경우에 적용
이 시간이 지났다고 바로 빠지지는 않는다. 문서에서는 15초정도 시간이 걸린다고 한다.
- 기본 규칙
- 트래픽이 빠지는 시간 간격
- Total
- Today
- Yesterday
- 오라클 인스턴트클라이언트(InstantClient) 설치하기(HP-UX)
- 오라클
- ORACLE 트러블 슈팅(성능 고도화 원리와 해법!)
- 커널
- 오라클 트러블 슈팅(성능 고도화 원리와 해법!)
- directory copy 후 startup 에러
- ubuntu
- 테라폼
- startup 에러
- 설치하기(HP-UX)
- [오라클 튜닝] sql 튜닝
- 오라클 홈디렉토리 copy 후 startup 에러
- K8s
- 5.4.0.1072
- 트리이스
- 앤시블
- 코로나19
- 우분투
- pod 상태
- 스토리지 클레스
- 버쳐박스
- MSA
- (InstantClient) 설치하기(HP-UX)
- 키알리
- 쿠버네티스
- Oracle
- 여러서버 컨트롤
- 튜닝
- [오라클 튜닝] instance 튜닝2
- CVE 취약점 점검
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |