사용한 기술: elasticsearch, painless
es 쿼리 수정한 이후 타임아웃 개수가 증가했다.
타임아웃이 증가했다는 건 다른 팀(우리팀 api 사용자)로부타 알게 되었다.
배포 이후 타임아웃이 증가했다는 사실을 인지하고, 타임아웃이 나지 않도록 수정하고자 했다.
처음에는 문제 지점을 좁히려고 시도했다.
es 쿼리를 성능 테스트를 할 수 있는 환경을 만들었다.(운영 테이블 복사, ngrinder 환경 구축, 테스트 대상 쿼리 추출 및 다듬기)
es 쿼리에서 의심 가는 부분을 몇 군데 정해서, 각 지점을 빼고 넣는 식으로 성능 부하 지점을 확인하고자 했다.
문제 지점을 좁히려는 시도는 도중에 그만뒀다.
팀 동료가 _source를 사용하는 부분이 성능 부하 지점일 것 같다는 의견을 주어, 문제 지점을 _source라고 가정하고 해결에 들어갔다.
우리가 사용하는 painless script에서 _source를 최대한 제거했다. 특정한 경우 _source를 _doc으로 대체할 수 있다.
기존 코드 중 object array 속 가장 낮은 long 필드를 가진 object를 구하는 코드가 있었는데, 이 부분을 _source 대신 _doc으로 바꾸었다.
코드 수정 이후, 이전/이후 버전을 비교할 수 있도록 성능 테스트를 했다.
개선 이후 버전의 mean test time이 160ms 정도였다면, 개선 이후 버전은 120ms로 확실한 차이가 있었다.
다음 날 배포했다.
1.. 만약 es painless 쿼리 수정이 필요한 작업이라면, 성능 테스트에 대한 일정을 1~2일 정도 잡자