데이터베이스 개발자 Tip & 강좌

SQLER의 개발자들이 만들어가는 데이터베이스 사용자 Tip & 강좌 게시판입니다. SQL서버, Oracle, MySQL 등 여러 클라우드/오픈소스 기반 데이터베이스 개발 및 운영 관련 팁과 쿼리 노하우를 이곳에서 가장 먼저 접하실 수 있습니다. 많은 도움 되시길 바랍니다.

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

 

  • 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의 값을 사용하여 에러를 발생 시킨다. 호출한 프로시저에서 실행되는 스테이트먼트 단위로 캡처된 것을 확인 할 수 있다.

 

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




강성욱 / jevida@naver.com
Microsoft SQL Server MVP
Blog : http://sqlmvp.kr
Facebook : http://facebook.com/sqlmvp

No. Subject Author Date Views
1853 Net Framework 4.0과 SQL Server 2008 설치 오류 jevida(강성욱) 2016.10.08 1863
1852 SQL Server 인덱스 튜닝 접근 jevida(강성욱) 2016.10.07 3489
1851 Sys.dm_os_performance_counter 해석하기 jevida(강성욱) 2016.10.07 2357
» 프로파일러를 이용한 중첩된 프로시저 디버깅 jevida(강성욱) 2016.10.07 1602
1849 SAN 스토리지 성능 모니터 - SAN 스토리지를 사용하는 경우 성능 카운터를 어떻게 모니터링 할까? jevida(강성욱) 2016.10.07 1772
1848 저장된 Plan Cache 확인 및 활용 jevida(강성욱) 2016.10.07 4694
1847 Xp_fixeddrives 세부 정보 확인하기 jevida(강성욱) 2016.10.07 1816
1846 강제 매개변수화로 인한 성능 저하 사례 jevida(강성욱) 2016.10.07 1584
1845 파라메터 스니핑과 데이터 스큐 jevida(강성욱) 2016.10.07 1544
1844 DBCC CHECKDB 버그 및 해결 방법 jevida(강성욱) 2016.10.07 1554
1843 NOLOCK HINT 이해 jevida(강성욱) 2016.10.07 7940
1842 인증으로부터 분리된 사용자 방지 jevida(강성욱) 2016.10.07 2534
1841 비관리자 계정으로 쿼리 계획 보기 jevida(강성욱) 2016.10.07 1256
1840 SSMS 폴링 간격 구성 jevida(강성욱) 2016.10.07 1792
1839 Deadlock 감지하여 알림하기 jevida(강성욱) 2016.10.07 1830
1838 Suspect_pages 테이블 이해 및 관리 jevida(강성욱) 2016.10.07 1391
1837 SSRS SocketException jevida(강성욱) 2016.10.07 1493
1836 파티션 분할 시 I/O 최소화 하기 jevida(강성욱) 2016.10.07 1887
1835 대량 BCP 작업 시 발생하는 오류 (665, 1450, 33) jevida(강성욱) 2016.10.07 1677
1834 기본 추적(default tace) 활성화 및 로그 확인 jevida(강성욱) 2016.10.07 1408





XE Login