Microsoft OLE DB Provider for SQL Server 오류 '80004005'
트랜잭션(프로세스 ID 74)이 잠금 리소스에서 다른 프로세스와의 교착 상태가 발생하여 실행이 중지되었습니다.
트랜잭션을 다시 실행하십시오.
요즘 들어서 이런 에러 메세지가 자주 뜨는데요... 이유가 몰까요?
발생되는 페이지는 실시간 접속자를 체크하는 페이지입니다.
고수님들의 간단한 덧글 하나하나가 저같은 초보자들에겐 큰 힘이됩니다.^^;;
불끈~
Comment 2
-
NiceHee
2013.08.22 10:38
-
블랙조
2013.08.26 16:54
MS 에서 Deadlock 을 최소화하기 위해 권고하는 사항들입니다.
1. Access Objects in the same order
2. Avoid User Interfaction in Transactions
3. Keep Transactions Short and in one batch
4. Use a Lower isolation level
5. Use a Row Versioning-Based Isolation level
6. Use Bound Connection
아마도 1번이 가장 유력한 후보일듯 보입니다.
예를 들어
A 프로시저의 개체 접근순서 r1 -> r2
B 프로시저의 개체 접근 순서 r2 -> r1
등입니다.
대략 개체 접근 순서를 r1 -> r2 로 통일하셔야 위와 같은 문제점에서 자유로와질 수 있습니다.
다른것들도 권고하는 사항이니 되도록이면 맞춰주시는게 좋습니다.
제가 알기로는 교착 상태를 해결하는 방법은...
1. 트랜젝션 단위를 최소화 한다.
2. 트랜잭션이 빠르게 실행되도록 한다.
3. 동일한 프로세스가 겹쳐서 실행되지 않도록 한다.
4. 데이터의 조회 및 수정이 한가지 방향으로 흐르도록 한다.
이런것들이 있는것으로 압니다....