2013-02-12 1 views
1

좋은 오픈 소스 또는 무료 MS SQL Server 트랜잭션 모니터링 차단 도구가 있습니까? X보다 오래 지속되는 차단 트랜잭션을 감지 한 다음 어딘가에서 경고를 전자 메일로 보내는 것이 이상적 일 수 있습니다.MS SQL Server 타사 트랜잭션 차단 모니터 도구

한 서버에 간단합니다. MS SQL Express 2008의 경우 특별히 적용되지만 모든 항목 또는 모든 항목에 적용해야합니다.

답변

6

예, 실제로 SQL Server에는 이러한 옵션이 기본적으로 제공되지만 거의 사용하지 않고 사용 방법을 알고있는 사람은 거의 없습니다. 프로세스 보고서가 생성 차단하는,

는 초 임계 값을 지정할 차단 된 프로세스 임계 값 옵션을 사용 :이 blocked process threshold이라고합니다. 임계 값은 0에서 86,400까지 설정할 수 있습니다. 기본적으로 차단 된 프로세스 보고서는 생성되지 않습니다. 이 이벤트는 시스템 태스크 또는 감지 가능한 교착 상태를 생성하지 않는 자원에서 대기중인 태스크에 대해서는 생성되지 않습니다.

이 이벤트가 생성 될 때 실행될 경고를 정의 할 수 있습니다. 예를 들어 관리자에게 차단 상황을 처리하기위한 적절한 조치를 취하도록 선택할 수 있습니다.

이 옵션을 사용하면 시스템에서 Blocked Process Report Event Class의 프로파일 러 이벤트가 생성됩니다. 다음 퍼즐 조각은 DDL Event Notifications을 사용하여이 (더 많은 정보를 포함하여) 프로필러 이벤트를 캡처 할 수 있다는 것입니다.

select * from tempdb..x 

10 초, 확실히 충분히 (우리 구성된 임계 값) :

use msdb; 
go 

create queue events; 
go 

create service events on queue [events] (
    [http://schemas.microsoft.com/SQL/Notifications/PostEventNotification]); 
go 

create event notification [blocked_threshold_exceeded] 
    on server for BLOCKED_PROCESS_REPORT 
    to service N'events', N'current database'; 
go 

exec sp_configure 'show advanced options', 1; 
reconfigure 
go 


exec sp_configure 'blocked process threshold', 10; 
reconfigure 
go 

-- simulate blocking 
use tempdb; 
go 

begin transaction; 
create table x (a int); 
go 

다른 세션에서 커밋되지 않은 트랜잭션에 블록 위에서 시작, 루나 쿼리, 이제 다음은 실제 예입니다 우리는 알림을받습니다 :

use msdb; 
receive cast(message_body as xml) from [events]; 

<EVENT_INSTANCE> 
    <EventType>BLOCKED_PROCESS_REPORT</EventType> 
    <PostTime>2013-02-12T16:19:55.610</PostTime> 
    <SPID>5</SPID> 
    <TextData> 
    <blocked-process-report monitorLoop="104441"> 
     <blocked-process> 
     <process id="process47b946cf8" 
      waitresource="OBJECT: 2:373576369:0 " 
      waittime="18952" ...> 
      <executionStack> 
      <frame line="1" stmtstart="-1" ... /> 
      </executionStack> 
      <inputbuf> 
select * from x </inputbuf> 
     </process> 
     </blocked-process> 
     <blocking-process> 
     <process status="sleeping" ....> 
      <executionStack /> 
      <inputbuf> 
create table x (a int) </inputbuf> 
     </process> 
     </blocking-process> 
    </blocked-process-report> 
    </TextData> 
... 
</EVENT_INSTANCE> 

블로커에 의해 마지막으로 실행 된 문장, 블로킹 된 현재 실행중인 문장 및 대기 시간을 볼 수 있습니다.

sp_send_db_mail을 사용하여 메일을 보내는 절차를 활성화하기 위해 이벤트 알림을 연결하는 것은 독자에게 연습 문제로 남겨 둡니다. 그리고 예, 위에서 언급 한은 모두 Express Edition에서 사용할 수 있습니다.

+0

좋은 정보, 당신이 제공 한 프로그래밍 솔루션에 감사드립니다. (주제와 관련하여 닫힌 이유와 반대!) – iss42

+0

누구든지이 작업을 원할 경우 도움이 될 수 있기 때문에 나는 스크립트를 작성하여 이메일을 보내기 위해 blat을 사용했습니다. windows 이메일 이벤트 옵션은 SMTP 로그인 등을 허용하지 않습니다. Blat은 http://www.blat.net/ – iss42

+0

btw입니다. 닫으려면 투표하지 않았지만 DBA.SE로 이동하려면 –