반응형
1. 개발 과정에서 성능 이슈 찾기
Hibernate에는 각 세션별 내부 통계를 확인할 수 있도록 출력해주는 기능이 있습니다. Spring Data JPA를 사용한다면 아래와 같이 설정하면 됩니다. (문제점을 찾을 때만 사용)
spring.jpa.properties.hibernate.generate_statistics=true
logging.level.org.hibernate.stat=DEBUG
추가적으로 다음과 같이 설정을 하면 느린 쿼리에 대한 정보를 얻을 수 있습니다.
spring.jpa.properties.hibernate.session.events.log.LOG_QUERIES_SLOWER_THAN_MS=10
2. in_clause_parameter_padding 옵션 사용
Hibernate 5.2.18 이후 버전에서는 in_clause_parameter_padding을 항상 true로 둘 것을 권장합니다.
spring.jpa.properties.hibernate.query.in_clause_parameter_padding=true
이 옵션 사용 시 IN 절 쿼리에 대해서 쿼리 수를 제한하여 과도한 메모리 사용을 줄일 수 있습니다.
# MySQL의 경우 in 쿼리의 ID 갯수가 너무 크면 index를 사용하지 않고, 통계를 사용하는 경우가 있습니다. 200개 기준인게 보통인데, in_clause_parameter_padding 옵션의 경우 2^n 단위로 증가하므로 128개를 초과하면 256개가 되어버리기 때문에 index를 사용하지 않을 수 있습니다.
따라서 in에 들어가는 id의 갯수는 128을 초과하지 않게 관리하는게 좋습니다.
[참고 사이트]
https://kwonnam.pe.kr/wiki/java/hibernate/performance
https://www.manty.co.kr/bbs/detail/develop?id=98
728x90
반응형
'back end > java' 카테고리의 다른 글
[JUNIT] Spring Test MockMvc의 한글 깨짐 처리 (0) | 2025.03.10 |
---|---|
Spring Data JPA에서 Insert 전에 select query를 하는 이유 (0) | 2024.02.02 |
[java] 문자열 자르기 함수 split 함수 사용 시 주의 사항. 문자열 자르는 방법 (0) | 2024.01.17 |
[JAVA] Google Authenticator(OTP)를 이용한 two factor 개발 방법 (0) | 2024.01.16 |
spring boot session timeout setting (0) | 2023.11.16 |