MsSQL 실행계획 분석법
쿼리문을 작성하다보면 해당 쿼리가 최선인지 애매한 순간이 있습니다. 이 때 DBMS에서 제공하는 실행계획 기능을 활용하면 더 나은 판단이 가능합니다.
SSMS 환경에서 쿼리에 대한 실행 계획을 분석하려면(단축키 Ctrl + L)
-
파일 메뉴를 사용하고 파일 열기를 클릭하여 이전에 저장된 쿼리 실행 계획 파일(.sqlplan)을 열거나 Management Studio 창으로 계획 파일을 끌어 놓습니다. 또는 쿼리를 실행하고 해당 실행 계획을 표시하도록 선택한 경우 결과 창의 실행 계획 탭으로 이동합니다.
-
실행 계획의 빈 영역을 마우스 오른쪽 단추로 클릭하고 실제 실행 계획 분석을 클릭합니다.
-
실행 계획 분석 창이 아래쪽에 열립니다. 분석할 올바른 명령문 쌍을 허용하여 다중 명령문으로 계획을 분석할 때 다중 명령문 탭은 유용합니다.
-
실제 실행 계획에 대해 찾은 문제에 대한 세부 정보를 보려면 [시나리오] 탭을 선택합니다. 왼쪽 창에서 나열된 각 연산자의 경우 오른쪽 창은 이 시나리오에 대한 자세한 내용은 여기를 클릭하세요 링크의 시나리오에 대한 세부 정보를 보여주며, 해당 시나리오를 설명하는 가능한 원인이 나열됩니다.
실행 계획 분석 후 성능 개선 방법
상대적인 비용과 쿼리 개선 대상 선정
프로시져가 3개의 작업 A, B, C로 구성되어 있고, 개별 작업들이 차지하는 비용(Cost) 비율의 총 합을 100%로 보았을 때. A : 20%, B : 10%, C : 70%로 구성되어 있다고 가정합니다.
실제 프로시져가 처리해야 하는 대상 테이블에 데이터가 1,000개가 있다고 이 프로시져가 이 데이터들을 모두 처리하는 데에 있어서 1.0 초의 시간이 걸린다고 가정하면, 1,000개의 데이터를 처리하는데에 A는 0.2초, B는 0.1초, C는 0.7초가 걸리게 됩니다. 데이터가 그대로 10배로 늘어나 10,000개의 데이터를 처리해야 한다면 A는 2초, B는 1초, C는 7초가 걸립니다.
이 말은 데이터량이 늘어나면 늘어날 수록 상대적인 비율이 큰 작업의 비용이 더 크게 증가함을 알 수 있습니다.
그렇다면 이 때, 가장 저렴한 비용으로 최고의 성능을 발휘할 수 있도록 성능을 개선하기 위해서는 어떻게 접근해야 할까요?
상대적인 비용이 가장 큰 작업을 우선적으로 개선하는 것입니다. 그렇다면 위의 예에서는 C 작업을 개선할 수 있는지 검토하고, 접근하는 것이 가장 바람직합니다. 물론 B의 작업을 개선하여 성능을 높일 수도 있습니다. 하지만 B의 작업을 개선하여 B의 작업 비용을 절반으로 줄인다면 전체적인 성능에서 5% 정도의 효율을 높인 것이지만, C의 작업을 개선하여 C의 작업 비용을 20%만 개선해도 전체적인 성능에서 14%의 효율이 올라감을 알 수 있습니다.
(시간적인 여유가 많아 A, B, C 작업 모두를 개선하여 성능을 높일 수 있지만, 시간적인 여유가 없을 경우 가장 효과를 볼 수 있는 작업을 우선적으로 진행합니다.)