본문 바로가기

프로젝트/KokoaHairshop4

쿼리 성능 개선 (MySQL Optimizer 실행 계획 분석) 1. 문제 설명 Jmeter를 이용하여 예약 가능한 시간 조회 성능을 테스트하였습니다. Jmeter를 통해서 서비스의 트래픽 가용성을 확인하였습니다. 시나리오 하루 이용자 수 9000명 하루 트래픽 180만 ⇒ 2분 동안 300명 사용자가 총 60000의 트래픽 발생시킨다. Number of Threads (users) : 300 Ramp-up period (seconds) : 120초 Loop Count : 200 평균 TPS : 약 240 실패율: 0.1% 분석 DB 서버의 CPU Utilization이 100%에 가깝습니다. HikariCP Connection Timeout이 발생하였습니다. 전체 트래픽을 처리하는데 4:14초가 소요되었습니다. 예약 시스템 특성상 예약 가능한 시간 조회 트랜잭션이 .. 2022. 7. 17.
HikariCP Dead Lock 해결 1. 문제 발생 Jmeter를 통해 예약 생성 성능 테스트를 하던 도중 Could not open JPA EntityManager for transaction; nested exception is org.hibernate.exception.JDBCConnectionException: Unable to acquire JDBC Connection Exception 이 발생하였습니다. Timeout 발생이 난 것을 확인하고 가장 처음 든 생각 처리할 수 없는 너무 큰 부하를 주었나? "hikariCP Connection Pool의 크기가 너무 작은가?" hikari의 maximum-pool-size를 default(10)에서 20으로 증가시켜주었습니다. datasource: hikari: maximum-poo.. 2022. 7. 17.
JPA 영속성 컨텍스트 주의점 1. 문제 발생 JPQL을 통해서 Designer를 조회할 때 fetch join을 통해서 OneToMany 관계를 맺고 있는 ReservationTime까지 정보를 가져오려고 시도하였다. 이때 Designer 정보는 잘가져오지만 Designer에 속하는 List 정보는 계속 size가 0인 문제가 발생하였다. 코드를 통해서 자세히 살펴보자. Entity @Entity @Getter @Table(name = "designer") @NoArgsConstructor(access = AccessLevel.PROTECTED) public class Designer { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(.. 2022. 7. 17.
N + 1 문제 해결 (Fetch Join, DISTINCT) 1. 문제 발생 designer 조회 시에 designer select 문 이외에 reservationTime 조회 쿼리가 추가적으로 발생하였습니다. Entity [DESIGNER] @Entity @Getter @Table(name = "designer") @NoArgsConstructor(access = AccessLevel.PROTECTED) public class Designer { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(name = "name", nullable = false, columnDefinition = "varchar(20)") private String name; @Column(na.. 2022. 7. 17.
반응형