오라클 실행계획의 중요성

내 자리에서는 0.1초 만에 결과가 나와요. 

실시간으로 결과를 제공해 주는 서비스를 운영시스템에 반영했다. 오픈 전 사용자 테스트를 진행했는데, 유독 한 서비스만 종종 타임아웃이 발생한다는 연락을 받았다. 해당 프로그램 개발자는 자기 로컬에서 관련 쿼리를 실행해 보면 모두 0.1초 내에 결과가 나오기 때문에 문제가 무엇인지 모르겠다고 한다.


APM 툴 확인

제니퍼에서는 서비스 응답 처리 중 특정 쿼리를 수행하는데 50초 정도를 사용하고 있는 것으로 나왔다. 담당 개발자는 전혀 수긍을 못하고 있었다. 결국 튜너에게 재요청을 하여 검토한 결과 50초가 정상이며, 튜닝이나 로직 변경이 필요하다는 의견을 받았다.


원인은 오라클 실행계획의 차이

원인은 오라클 실행계획의 차이였다. 담당 개발자는 함수 호출 권한이 없는 오라클 계정을 사용했기 때문에, 로컬에서 쿼리 실행 시 함수 호출 부분을 상수화 시켜놓고 쿼리를 실행하고 있었다. 운영 환경에서는 함수 호출을 하기 때문에 오라클 실행계획이 달라져서 수행 시간의 차이가 발생한 것이다.


무엇이 문제였을까?

먼저 쿼리 튜닝 자체를 요청하지 않았다. 개발 시점에 자기 PC에서 0.1초 만에 결과가 나오니, 튜닝 요청을 아예 하지 않은 것이다.
그리고 함수 호출을 하지 않을 경우, 오라클 실행계획이 바뀔 수 있다는 것을 알지 못했다. 그래서 개발환경과 운영환경에서 수행되는 쿼리가 명백히 다름에도 어디서부터 해결해 나가야 할 지 갈피를 잡지 못한 것이다.


로직 개선

쿼리 튜닝으로는 성능 개선에 한계가 있어서 로직을 개선하기로 결정했다. 쿼리 튜닝 절차를 거쳤다면, 운영 반영 후 다시 개발을 해야하는 상황까지는 오지 않았을텐데.

댓글 쓰기

0 댓글