저는 SQL Server DBA로서 초보자입니다. 적어도 한 번 Merge 문을 사용하는 SQL Server 2012 서버에서 교착 상태 문제가 발생했습니다. 병합 문에는 NOLOCK
, UPDLOCK
, HOLDLOCK
과 같은 절이 사용되지 않았습니다. BizTalk이 XML을 읽고 SQL Server에 데이터를 저장하는 다중 사용자 환경입니다.SQL 서버 교착 상태 - 수정 필요
분당 BizTalk는 300 xml 메시지를 읽습니다. 프로덕션 서버가 있기 때문에 연구를하지 않고서는 아무 것도 구현할 수 없지만이 문제를 해결하는 방법에 대해서는 알지 못했습니다. 최근에 두 xml 메시지가 테이블의 데이터를 업데이트하려고 시도하고 동일한 인덱스를 사용하려고 시도하면서 오류가 발생했습니다. 누구든지이 문제를 해결하는 방법을 알려줄 수 있습니까?
재현 가능한 케이스를 얻을 수 있다면 SQL Trace를 재생하면서 모든 'deadlock'이벤트를 추적하십시오. 이렇게하면 어떤 SQL이 교착 상태에 있는지, 정확히 어떤 자원에 대한 정보를 얻을 수 있습니다. 교착 상태는 거의 항상 하나의 스레드가 자원 A 다음에 B로 이어지는 결과이며, 다른 스레드는 B, A 뒤에옵니다. 때로는 교착 상태를 제거하기 위해 색인을 추가하거나 제거 할 수 있지만, 동일한 시간에 항상 자원을 확보하려면 코드를 수정해야하는 경우가 있습니다 주문. – pmbAustin
나는 교착 상태 추적을 가져 와서 문제가 어디에 있는지 이해했다. 그러나 교착 상태는 항상 발생하지만 병합 성명서에서 자주 결정을 내리는 데 혼란을줍니다. – aprasy
교착 상태 그래프에는 교착 상태가되는 정확한 항목 (예 : 특정 색인을 식별 할 개체 ID)이 표시되어야합니다. 그것이 당신이 시작할 필요가있는 곳입니다. 매우 큰 ID가 있으며이 SQL을 사용하여 참조하는 내용을 정확히 디코딩 할 수 있습니다. SELECT hobt_id, object_name (p. [object_id]), index_id FROM sys.partitions p WHERE hobt_id = 72057594060734464 - 특정 자물쇠 ID – pmbAustin