2010-12-22 3 views
3

선택 쿼리를 실행할 때 '잠금 요청 시간이 초과되었습니다'오류가 발생합니다.SQL 서버 오류 - 잠금 요청 시간 초과가

나는이 오류가 언제 나타날지 알고 있습니다. 일부 트랜잭션은 테이블을 잠그고 있어야합니다.

하지만 어떻게 찾을 지 알아야합니다.

잠겨있을 때 실시간으로 확인할 수 없습니다. 그것은 과거에 일어난 것 같지만 그 시간을 막고 있던 다른 트랜잭션/쿼리가 무엇인지 알아야합니다.

이 이벤트가 발생하면이 이벤트가 SQL 오류 로그에 기록되어 나중에 볼 수 있고 누가 장기 실행 쿼리를 차단했는지 찾을 수 있습니다.

어떻게 기록 할 수 있는지 알아보십시오. 추적 플래그를 설정하고 확인하려고했습니다. DBCC TRACEON (1204,1222, -1) 그러나 이와 관련된 로그를 찾을 수 없습니다. 미리 감사드립니다.

답변

1

실행중인 SQL Server 버전은 무엇입니까? SQL 2008 이전 버전을 사용 중이라면 IT 직원과 협력하여 실제 상황을 실시간으로 분석해야합니다.

2008 년에는 관리 뷰에서 데드락 이벤트가 노출 될 때이를 다시 소급하여 볼 수 있습니다. 그것의 XML로 저장하지만 당신은 쉽게 그것을 밖으로 나눌 수 있습니다 ...

Select 
    DLEvent.XEvent.value('(data/value)[1]', 'varchar(max)') as DeadlockGraph 
From 
    (
     select CAST(target_data as xml) as DLData 
     from sys.dm_xe_session_targets st 
     join sys.dm_xe_sessions s 
     on s.address = st.event_session_address 
     where name = 'system_health' 
    ) AS DLData 

CROSS APPLY DLData.nodes ('//RingBufferTarget/event') AS DLEvent (XEvent) 

Where DLEvent.XEvent.value('@name', 'varchar(max)') = 'xml_deadlock_report' 
+0

예 나는 2008 년 SQL에있어.이 쿼리 주셔서 감사. 그러나 교착 상태 이벤트의 세부 정보를 제공하는 것처럼 보입니다. 교착 상태가 발생하지 않고 잠금 시간이 만료되었습니다. 내 테이블 시간이 초과되도록 테이블이 다른 장기 실행 트랜잭션이나 쿼리에 의해 잠겨 있음을 의미합니다. 자물쇠를 들고있는 다른 쿼리가 누구인지 찾는 방법이 필요합니다. 자물쇠가 열리는 동안 찾을 수 없기 때문에이 이벤트를 기록하거나 저장하기 위해 어딘가에 저장하고 싶습니다. 교착 상태 이벤트가 필요하지 않아서 잠금 시간 초과 이벤트가 기록되기를 원합니다. – tamizhan

+0

OK, 두 번째 걸릴 및 나는 더 이상 사무실에 없으므로 이번에는 스크립트를 작성할 수 없습니다. 또 다른 sys.dm_tran_locks가 있습니다. 활동 모니터가 이에 대한 친숙한 얼굴 SSMS의 도구 모음에있는 활동 모니터 아이콘을 클릭하십시오. 마지막으로 프로파일 러는 이러한 종류의 작업에 사용될 수 있으며 추적 할 것입니다. 필요한 옵션을 기억할 수 없으며 아침에 다시 보입니다. – u07ch

관련 문제