개요 최근 전에 경험하지 못한 슬로우 쿼리 이슈를 해결하면서 허탈한 마음과 함께 정리하였다. 확인된 이슈 인덱스가 생성되어 있는 컬럼에 대해 2개 이상의 복수개의 파라메터를 IN 조건으로 조회하면 무조건 10초 이상의 슬로우 쿼리가 발생한다. 대상 테이블은 약 2천만개의 로우를 가진 파티셔닝 되지 않은 테이블이다. # 파라메터가 1개일 경우 # 슬로우 쿼리가 발생하지 않음, 1ms 소요 SELECT * FROM foobar WHERE id IN (1); # 파라메터가 2개 이상일 경우 # 슬로우 쿼리가 발생, 최소 10초 이상 소요 SELECT * FROM foobar WHERE id IN (1, 2); 파라메터가 1개일 때만 인덱스를 사용하고, 파라메터가 2개 이상이면 테이블이 무조건 풀스캔된다. US..
개요 최근 슬로우 퀴리 이슈를 해결하면서 비약적인 속도 향상을 경험했는데, 사실 지금도 완전히 이해가 되지 않는 기묘한 부분이라 먼저 정리해둔다. 확인된 이슈 문제의 쿼리는 아래 모양새의 전형적인 페이지네이션 쿼리이다. (실제 운영 쿼리는 복잡한 여러 JOIN 절이 추가되어 있다.) SELECT * FROM foo WHERE ... ORDER BY created_at, id LIMIT 500 OFFSET 0; 신기한 점은 대부분의 쿼리 조건에서는 전혀 문제가 없었지만 특정 조건에서만 ORDER BY, LIMIT, OFFSET의 조합이 30~50초의 슬로우 쿼리로 모니터링되었다.처음에는 WHERE 조건의 대상과 순서를 적절히 재배치하여 효과를 보았지만, 모니터링 결과 이 것이 단순한 인덱스 사용 효율의 문..
개요 Spring Boot, JPA 환경에서 개발자를 당황시키는 AssertionFailure 예외가 발생하는 이유와 해결책을 정리하였다. org.hibernate.AssertionFailure: null id in com.jsonobject.domain.Foo entry (don't flush the Session after an exception occurs) AssertionFailure 예외가 발생하는 이유 AssertionFailure 예외를 발생시킨 지점은 실제 범인이 아닐 가능성이 높다. 같은 트랜잭션(세션) 범위 내에서 앞서 실행된 어떤 쿼리가 영향을 미쳤을 확률이 높다. AssertionFailure 예외는 @Transactional이 명시된 세션 내의 복수개의 쿼리가 연속적으로 실행되는..
개요 NGINX는 오랜 역사와 뛰어난 성능을 자랑하는 오픈 소스 리버스 프록시 소프트웨어이다. 일반적으로는 고정된 특정 목적지에 대한 리버스 프록시이자 로드 밸런서로 구성하는데 사용되는데, 이번 글에서는 요청 정보에 포함된 목적지 주소를 인식하여 다이나믹 리버스 프록시로 셋업하는 방법을 간단히 소개하고자 한다. (NGINX에 대한 자세한 사용법은 본 블로그의 이 글을 참고한다.) Dockerfile Dockerfile을 아래와 같이 작성한다. 직접 작성한 NGINX 설정 파일을 복사하는 과정을 추가했다. FROM public.ecr.aws/nginx/nginx:latest EXPOSE 80 COPY default.conf /etc/nginx/conf.d/default.conf default.conf NG..
- Total
- Today
- Yesterday
- Spring Boot
- 알뜰폰
- jsp
- DynamoDB
- Eclipse
- JavaScript
- jpa
- graylog
- Tomcat
- jstl
- 태그를 입력해 주세요.
- node.js
- Docker
- 로드바이크
- CentOS
- JHipster
- kotlin
- 로드 바이크
- java
- maven
- 평속
- bootstrap
- Kendo UI
- 자전거
- spring
- 구동계
- MySQL
- Kendo UI Web Grid
- Spring MVC 3
- chrome
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |