SQL Server/SQL Server Tip

프로파일러를 이용한 중첩된 프로시저 디버깅

SungWookKang 2015. 7. 22. 10:42
반응형

프로파일러를 이용한 중첩된 프로시저 디버깅

 

  • Version : SQL Server 2005, 2008, 2008R2, 2012

 

SQL Server에서 데이터베이스의 성능 튜닝을 위한 정보를 수집하거나 요청되는 쿼리, 발생하는 각종 정보를 수집하기 위해 프로파일러라는 도구를 사용한다. 프로파일러는 SQL Server 솔루션에서 제공하는 기본 도구로 무료로 사용할 수 있지만 기능은 매우 강력하다.

 

 

위의 아티클에서 프로파일러의 기본 사용법을 숙지 하였다면 이번 시간에는 프로파일러에서 중첩된 프로시저에 대한 디버깅을 하는 방법을 알아보도록 한다.

 

우선 실습을 위해 다음 스크립트를 실행하여 중첩된 프로시저를 생성한다. Usp_a1을 실행 할 때 파라메터로 1의 값을 하였을 경우에는 정상적으로 실행 되지만 1이 아닌 값을 실행 하였을 때에는 usp_a2에서 에러가 발생한다.

use tempdb

go

 

begin try

    drop procedure usp_a2

end try begin catch end catch

go

 

begin try

    drop procedure usp_a1

end try begin catch end catch

go

 

create procedure usp_a2

@num int

 

as

 

if @num = 1

begin

    select 'usp_a2_1'

end

else

begin

    select 0/0

end

go

 

create procedure usp_a1

@num int

 

as

 

exec usp_a2 @num

select 'usp_a1'

go

 

 

프로파일러를 실행하고 기본 템플릿을 사용한다. usp_a1을 호출 한다. 해당 프로시저가 정상적으로 실행되어 결과 값을 반환 하였다.

exec usp_a1 1

 

 

 

Usp_a1을 호출 할 때 파라메터에 2를 사용한다. 다음과 같이 usp_a2에서 에러가 발생 하였을 경우에도 프로파일러에는 usp_a1에 대한 요청만 캡처 된 것을 확인 할 수 있다.

exec usp_a1 2

 

 

 

호출 한 프로시저의 중첩 된 프로시저를 디버깅 하기 위해 프로파일러 속성을 수정하여보자.

추적 속성에서 [모든 이벤트 표시]를 선택하고 stmtComplete를 선택 한다.

 

Usp_a1 호출 시 2의 값을 사용하여 에러를 발생 시킨다. 호출한 프로시저에서 실행되는 스테이트먼트 단위로 캡처된 것을 확인 할 수 있다.

 

아마 대부분의 현업에서는 중첩 프로시저를 많이 사용하여 개발하는 환경이 많으리라 생각한다. (필자가 만든 시스템도 중첩 프로시저가 매우 많다.) 프로파일러의 기능과 특성을 잘 활용하면 데이터베이스에서 발생하는 정보를 확인할 수 있으며 관리 및 개발에 많은 도움이 되리라 생각한다.

 

2013-09-23 / 강성욱 / http://sqlmvp.kr

 

 

 

반응형