Issue

특정 페이지의 조회가 매우 느리다는 유지보수 건을 처리하게 되었다. 서비스 페이지에서 확인 해본 결과 조회를 하는데 1분이상 걸리고 때로는 time out이 났다.

확인

페이지 조회의 쿼리를 질의브라우저에서 실행해본 결과 질의 시간도 5초이내로 수행되고 검색결과도 많지 않았다. 쿼리에 문제가 없는 것으로 생각하고 Java에서 lock이 걸리는 것이 있는지 확인을 해보았지만 lock이 걸린것도 아니었다. 실행 결과 수도 100건이하였고, 단순히 리스트를 조회하여 화면에 출력하는 부분이어서 처리 수행시간이 오래 걸릴 부분이 아니었다.

원인

DBA님을 통해 확인해본 결과 큐브리드는 DB에 직접 연결을 하는것이 아니라 브로커(broker)를 통해서 질의를 수행하고 처리결과를 사용자에게 준다. 각 브로커는 접속포트별로 있으며, 브로커별로 별도의 쿼리플랜을 캐쉬에 저장한다고 한다. 따라서 서비스단의 브로커의 쿼리플랜이 질의 브라우저에서 수행한 브로커의 쿼리플랜과 달라서 수행시간에 차이가 있었던 것이다.

해결

쿼리 플랜을 확인 해본 결과 데이터가 많은 매핑테이블에서 full scan이 있었다. index scan이 될 수 있도록 index를 변경하였지만 그럼에도 플랜이 full scan이 되는 문제가 있었다. 플랜을 수정하기 위해 /+USE_IDX ORDERED/ 쿼리 힌트를 추가하고 나니 질의 속도가 매우 빨라졌고 해당 이슈를 해결 할 수 있었다.