'xevent'에 해당되는 글 2건

  1. deadlock capture of XEvent
  2. (펌) SQL Server 2012 에서 Extended Events 를 통해 call stack 확인

deadlock capture of XEvent

'Extended Events' 카테고리의 다른 글

Xevent Query Trace Filtering  (0) 2013.05.03
XEvent - SQL Trace와 동일한 결과 얻기  (0) 2013.03.19
XEvent 정리  (0) 2013.03.12

http://cafe.naver.com/sqlmvp/3846

SQL Server 2012 에서 Extended Events 를 통해 call stack 확인 - 고성민



오랜 만에 심야 세미나 재밌었습니다. :)

SQL Server 2012 에서 Call stack 이 보이지 않았던 부분에 대해서 확인된 사항 업데이트 해 봤습니다~

 

아래 링크과 같이 Jonathan Kehayias의 An XEvent a Day 포스팅 자료에서 Extended Events 를 사용하여 call stack 을 확인하는 방법이 포스팅 되어 있습니다만 SQL Server 2012 에서는 call stack 이 정상적으로 나타나지 않습니다.

 

An XEvent a Day (24 of 31) – What is the package0.callstack Action? 
http://sqlblog.com/blogs/jonathan_kehayias/archive/2010/12/24/an-xevent-a-day-24-of-31-what-is-the-callstack-Action.aspx


 

위 포스팅 예제와 같이 SQL Server 2008 R2에서는 sqlservr.pdb 파일만을 사용하여 Call stack 을 확인하지만 SQL Server 2012 에서는 추가적으로 더 필요한 pdb 파일들이 있습니다. 간단히 아래 예제로 확인해 보실 수 있습니다.

 

1. SQL Server mini dump 생성
C:\Program Files\Microsoft SQL Server\110\Shared> sqldumper 980 0 0x0120

-- sqlservr.exe PID : 980

-- SQLDmpr001.dmp 파일이 해당 폴더에 생성됩니다.

 

2. windbg 실행 
 가. 심볼 설정 : SRV*c:\symbols*http://msdl.microsoft.com/download/symbols
 나. SQLDmpr0001.dmp 파일을 windbg 로 불러옵니다. 아래와 같이 심볼 로딩이 완료되면 windbg 를 종료합니다.

Loading unloaded module list
................
Automatically loaded SOS Extension
ntdll!NtWaitForSingleObject+0xa:
000007ff`04962c2a c3              ret
0:000>

 

 

3. 심볼 복사 
c:\symbols 폴더에 있는 sqldk.pdb, sqllang.pdb, sqlmin.pdb, sqlservr.pdb 4개의 파일을 BIN 폴더로 복사합니다.
C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Binn

 

4. 오류 발생
RAISERROR(50001, 20, 1, 'This is an Error!') WITH LOG

 

5. Extended Event 를 사용하여 Call stack 확인

 

SELECT n.query('.') AS callstack
FROM
(
    SELECT CAST(target_data as xml)
    FROM sys.dm_xe_sessions AS s 
    INNER JOIN sys.dm_xe_session_targets AS t
        ON s.address = t.event_session_address
    WHERE s.name = 'system_health'
      AND t.target_name = 'ring_buffer'
) AS src (target_data)
CROSS APPLY target_data.nodes('RingBufferTarget/event/action[@name="callstack"]') as q(n)

 

[결과]

<action name="callstack" package="package0">
  <type name="callstack" package="package0" />
  <value>XeSqlPkg::CollectSqlText&lt;XE_ActionForwarder&gt;+ec [ @ 0+0x0
XeSqlPkg::CollectSqlTextActionInvoke+29 [ @ 0+0x0
XeSqlPkg::CollectTSqlStack&lt;XE_ActionForwarder&gt;+2fa [ @ 0+0x0
XeSqlPkg::CollectTSqlStackActionInvoke+29 [ @ 0+0x0
XeSqlPkg::error_reported::Publish+138 [ @ 0+0x0
ErrorReportedAutoPublish::Publish+2d3 [ @ 0+0x0
CErrorReportingManager::CwchFormatAndPrint+a7e [ @ 0+0x0
CXStmtError::XretExecute+7e1 [ @ 0+0x0
CMsqlExecContext::ExecuteStmts&lt;1,1&gt;+400 [ @ 0+0x0
CMsqlExecContext::FExecute+a33 [ @ 0+0x0
CSQLSource::Execute+866 [ @ 0+0x0
process_request+73c [ @ 0+0x0
process_commands+51c [ @ 0+0x0
SOS_Task::Param::Execute+21e [ @ 0+0x0
SOS_Scheduler::RunTask+a8 [ @ 0+0x0
SOS_Scheduler::ProcessTasks+299 [ @ 0+0x0
SchedulerManager::WorkerEntryPoint+261 [ @ 0+0x0
SystemThread::RunWorker+8f [ @ 0+0x0
SystemThreadDispatcher::ProcessWorker+3c8 [ @ 0+0x0
SchedulerManager::ThreadEntryPoint+236 [ @ 0+0x0
BaseThreadInitThunk+1a [ @ 0+0x0
RtlUserThreadStart+21 [ @ 0+0x0</value>
</action>

 

 

라이고 블로그 : http://laigo.kr/739

'Tool' 카테고리의 다른 글

Process Explorer  (0) 2013.05.07
IOPS 계산기~ 얼~~  (0) 2013.05.06
(펌) pssdiag 또는 sqldiag를 이용하여 sp_blocker_pss파일로 남기기  (0) 2013.04.29
Process Monitor  (0) 2013.04.24
(펌) TPC-C Base 성능 테스트 방법  (0) 2013.04.23