2017-01-24 4 views

답변

1

저는 최근에 비슷한 질문을했습니다. 교착 상태는 C# 코드에 관계없이 CommandTimeout 예외를 던지는 것과 관계없이 유지 될 수 있습니다. 취소 이벤트 신호은 C# 응용 프로그램 계층에서 명령이 시간 초과되고 쿼리가 중단되어야 함을 DB로 보냈지 만 은 데드락을 정리하기 위해 DB에 달려 있습니다. 그것은 얼마나 많은 트랜잭션이 롤백되어야하는지에 따라 시간이 걸릴 수 있습니다. (항상 교착 상태의 SPID를 죽이려고 할 수는 있지만 잘못 된 것이 무엇인지 파악하기 위해 오류 로그를 제공하지 않으면 몇 가지 문제가 발생할 수 있으므로 매우주의해야합니다.)

트랜잭션을 사용하고 시간 초과가 자주 발생하는 경우 SET XACT_ABORT ON을 사용하는 것이 좋습니다.

나는 그것이 교착 상태에있는 이유는 무엇입니까? exec SP_WHO2을 사용하여 잠겨있는 것을 확인하거나 SQL 프로필러/추적을 실행하여 범인을 확인할 수 있습니다.