Stored procedure 에서 transaction을 걸때 isolation level을 잘못 쓰면 select 할때도 락을걸어 다른 프로시져에서 기다리게 만든다.
Isolation level:
https://support.microsoft.com/ko-kr/kb/601430
위 상황이 확률이 높고.. 여러개의 procedure들간 테이블 업데이트 순서가 달라도 발생가능성이 있다고 한다.
데드락인 상황을 그려보면,
SP1
Begin tran
Update A
Update B
SP2
Begin tran
Update B
Update A
이 두 프로시져가 다수 호출되는 서비스라면 서로 우연찮게 같은 row를 고치려고 할때 각각의 프로시져가 커밋될때까지 기다리는 데드락 상황이 올수있다.
이와같은 업데이트가 아니더라도 isolation level을 잘못 셋팅하면 셀렉트도 발생시키는 원인이 될수 있다.