안녕하세요.
트랜잭션(프로세스 ID 137)이 잠금 리소스에서 다른 프로세스와의 교착 상태가 발생하여 실행이 중지되었습니다. 트랜잭션을 다시 실행하십시오.
간혹가다 위와 같은 오류로 로그가 남는데요.
처리 방법에 대해서 문의드립니다.
위 구문이 발생하는 로직은 아래와 같은 로직입니다.
(트랜젝션으로 묶여 있어요.)
begin tran
select @state = state from tblBookingState where .....
if @state is null
insert into tblBookingState .............
else
update tblBookingState .......................................
comint tran
질문의 하기 전에 검색을 통해 얻은 답변은
select 할때
with nolock
을 처리 하라는것인데요. 안전한가 의문입니다.
테이블명을 보시면 아시겠지만.
예약 상태를 관리 하는 데이타라..
트랜젝션으로 묶었고.
select 하고 insert 혹은 update 가 완료 되기까지. 다른쪽 커넥션에서
데이타를 잘못된 정보로 select 하거나. insert 혹은 update 해서는 안되거든요.
빨리 처리 되게 하기 위해
where 절에서 사용 하는 검색 index 는 클러스트 인덱스로 잘 잡혀있고요.
Comment 1
-
처리짱
2017.04.06 13:38
insert는 테스트를 안해 봤는데 update의 경우에 1을 2로 업데이트 하는 과정에
다른 세션에서 with (nolock)로 select를 하면은 2로 값이 나옵니다.
모든 구문에 with (nolock)를 거는거에 저는 무관하다고 판단이 됩니다만.. (실제로 그렇게 쓰고 있고요..)
그게 힘든 상황이라 하면 update나 insert를 빨리 끝내는 방법 밖에는 없지 않을까요;