프로파일러를 이용한 중첩된 프로시저 디버깅
- Version : SQL Server 2005, 2008, 2008R2, 2012
SQL Server에서 데이터베이스의 성능 튜닝을 위한 정보를 수집하거나 요청되는 쿼리, 발생하는 각종 정보를 수집하기 위해 프로파일러라는 도구를 사용한다. 프로파일러는 SQL Server 솔루션에서 제공하는 기본 도구로 무료로 사용할 수 있지만 기능은 매우 강력하다.
- 프로파일러 사용법(기본) : http://sqlmvp.kr/140149940592
위의 아티클에서 프로파일러의 기본 사용법을 숙지 하였다면 이번 시간에는 프로파일러에서 중첩된 프로시저에 대한 디버깅을 하는 방법을 알아보도록 한다.
우선 실습을 위해 다음 스크립트를 실행하여 중첩된 프로시저를 생성한다. 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
'SQL Server > SQL Server Tip' 카테고리의 다른 글
SQL Server 인덱스 튜닝 접근 (0) | 2015.07.22 |
---|---|
Sys.dm_os_performance_counter 해석하기 (0) | 2015.07.22 |
SAN 스토리지 성능 모니터 - SAN 스토리지를 사용하는 경우 성능 카운터를 어떻게 모니터링 할까? (0) | 2015.07.22 |
저장된 Plan Cache 확인 및 활용 (0) | 2015.07.22 |
Xp_fixeddrives 세부 정보 확인하기 (0) | 2015.07.22 |