문서의 선택한 두 판 사이의 차이를 보여줍니다.
| 양쪽 이전 판 이전 판 다음 판 | 이전 판 | ||
|
java:hibernate:performance [2022/01/14 15:45] kwon37xi |
java:hibernate:performance [2024/03/04 12:47] (현재) kwon37xi [@org.hibernate.annotations.BatchSize] |
||
|---|---|---|---|
| 줄 11: | 줄 11: | ||
| * [[java: | * [[java: | ||
| - | ==== Join Fetch ==== | + | ===== N+1 ===== |
| - | * JPQL 에서 '' | + | * [[https:// |
| + | * https:// | ||
| + | * [[https:// | ||
| + | ===== Join Fetch ===== | ||
| + | * JPQL 에서 '' | ||
| + | * 하지만 **1:N 관계에서 1측이 N 만큼 반복 조회되는 문제가 있다. 실제 엔티티 객체가 여러개 생성된다.** | ||
| + | * **limit 을 걸더라도 limit 이 DB에 걸리지 않고 모두 조회후 메모리에 걸리게 된다.** | ||
| + | * 따라서 '' | ||
| + | * see [[java: | ||
| + | * [[java: | ||
| ===== @org.hibernate.annotations.BatchSize ===== | ===== @org.hibernate.annotations.BatchSize ===== | ||
| '' | '' | ||
| 줄 22: | 줄 31: | ||
| * '' | * '' | ||
| * OneToOne, ManyToOne | * OneToOne, ManyToOne | ||
| - | * 지나치게 큰 값을 설정하지 말아야 한다. 30개 정도가 적당해 보이며, 쿼리 실행시간이 수십 밀리세컨드 이내로 끝날 수준으로 정하는게 좋다. | + | * 지나치게 큰 값을 설정하지 말아야 한다. 30개 정도가 적당해 보이며, 쿼리 실행시간이 수십 밀리세컨드 이내로 끝날 수준으로 정하는게 좋다. '' |
| ===== hibernate.jdbc.fetch_size ===== | ===== hibernate.jdbc.fetch_size ===== | ||
| 줄 37: | 줄 46: | ||
| * '' | * '' | ||
| * [[https:// | * [[https:// | ||
| - | * 위 옵션을 켜지 않으면, '' | + | * 위 옵션을 켜지 않으면, '' |
| * 또한 RDBMS 의 경우 그 자체 execution plan cache 가 있는데, 이 옵션을 켜면 그에 대한 hit 율도 높아지게 된다. | * 또한 RDBMS 의 경우 그 자체 execution plan cache 가 있는데, 이 옵션을 켜면 그에 대한 hit 율도 높아지게 된다. | ||
| + | <note warning> | ||
| + | [[database: | ||
| + | 특히 200 개 기준인게 보통인데, | ||
| + | |||
| + | in 에 들어가는 값이 128 을 초과하지 않게 파티셔닝하고 관리하는게 좋다. '' | ||
| + | |||
| + | * '' | ||
| + | * '' | ||
| + | |||
| + | 참조 : [[https:// | ||
| + | </ | ||
| ===== Hibernate Query Plan Cache ===== | ===== Hibernate Query Plan Cache ===== | ||
| * [[https:// | * [[https:// | ||
| 줄 60: | 줄 80: | ||
| * [[springframework: | * [[springframework: | ||
| * [[https:// | * [[https:// | ||
| + | * https:// | ||
| * '' | * '' | ||
| if (!vendorProperties.containsKey(PROVIDER_DISABLES_AUTOCOMMIT)) { | if (!vendorProperties.containsKey(PROVIDER_DISABLES_AUTOCOMMIT)) { | ||