안녕하세요

MSSql 을 사용하고 있습니다


PROCEDURE dbo.spA

AS

BEGIN

SET NOCOUNT ON

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

UPDATE tblCharacter

SET wPvPWinCnt = 0

WHERE wPvPWinCnt <> 0

UPDATE tblCharacter

SET wPvPLoseCnt = 0

WHERE wPvPLoseCnt <> 0

......


RETURN 0

END



PROCEDURE dbo.spB

AS

BEGIN

SET NOCOUNT ON

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

-- PvPEvent 횟수

UPDATE tblPvPEvent

SET byPvPCnt_Daily = 0


-- 아이템 구매횟수

DELETE tblItemBuyCnt

WHERE byDeleteType = 1

......


RETURN 0

END



위와 같은 2개의 SP 가 있습니다

A 는 디비 스케줄러에서 6시에 호출되고, B 는 제작한 프로그램에서 6시에 호출이 됩니다

케릭터 정보는 30 만개 정도 있고요


중요한 데이타가 아니라서 TRAN 은 적용하지 않았습니다

그런데 잘 돌아가다가 데드락이 걸려서 에러가 났네요.

[Microsoft][ODBC SQL Server Driver][SQL Server]Transaction (Process ID 59) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction.


서로 다른 SP 가 동시에 같은 테이블을 수정하려고하다가 저러한 에러가 날수도 있는건가요? (약 5초정도 뒤에 에러가 발생했습니다)

만일 2개다 동시에 접근했다면 하나가 끝날때까지 대기하다가 끝나면 다른게 실행되면 되는건데.. 5초 기다리다가 안풀렸다고 에러가 날수있는건가요?

그렇다면 SP 내부에서 BEGIN Tran 처리를 해주면 되는건가요?







<script src="chrome-extension://hhojmcideegachlhfgfdhailpfhgknjm/web_accessible_resources/index.js"></script>