안녕하세요,
SQLServer 2008 R2를 사용중입니다.
'잠금 리소스에서 다른 프로세스와의 교착 상태가 발생하여 실행이 중지되었습니다. 트랜잭션을 다시 실행하십시오.'
라는 메세지가 자주 발생하는데..
관련 테이블을 조회할때 WITH (NOLOCK) 옵션도 넣고 인덱스도 만들고 해보는데..위의 메세지는 여전히 발생합니다.
어떻게 해야 할지 난감합니다.
도움 부탁드립니다.
관련 SQL문은 다음과 같습니다.
******************************************************************************
UPDATE TBL_HISTORY
SET STS_CD = 'CD101', AUTH_CD = 'CD201', AUTH_REASON_CD = 'CD301', IPADDR = '192.168.21.60',
AUTH_PROC_TIME = getDate()
WHERE LOC_CD='53028000'
AND YEAR='2016'
AND SUBJECT_CD='53028000|2016|14400041|369|4|2006311'
AND ADMIN_NO='2006311 '
AND convert(date, ACT_DATE)='06/01/2016 00:00:00.000'
AND USER_NO='201644001'
******************************************************************************
Comment 11
-
이리
2016.06.01 10:45
-
sniper7000
2016.06.01 11:35
예..있습니다.
이력정보를 조회해서 없으면 입력하고, 있으면 업데이트하고..이런식입니다.
SELECT할때는 SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED 이것도 넣어보고
해당 테이블에 WITH(NOLOCK) 옵션도 넣었습니다.
-
이리
2016.06.01 11:44
SELECT 구문에 WITH(UPDLOCK)를 한번 사용해 보세요
-
sniper7000
2016.06.01 12:02
답변 감사드립니다.
말씀하신대로 적용해 보겠습니다.
-
sniper7000
2016.06.01 13:38
말씀하신대로 SELECT 문에 WITH(UPDLOCK)을 사용해 봤는데..
동일한 현상이 발생하고 있습니다.
SELECT문에서도 교착상태 발생하고 있습니다.
어찌해야 할까요?..TT
-
이리
2016.06.01 13:48
저 쿼리만 문제 되는게 아니라 다른 쿼리까지 봐야 할텐데 ㅎㅎ
저의 한계는 여기까지..
실행계획이나 프로파일러로 교착상태 발생한 시점에 그래프를 올려주시면 고수님들이 조언드리기 더 편할거 같습니다.
-
minsouk
2016.06.01 15:06
dbcc traceon(1222, 1204, -1) 을 일단 enable 시켜 두거나 서버 레벨에서 스타트 옵션으로 추가해 줍니다.
sp_readerrorlog 를 읽어서 올립니다. 이 때,
연관된 테이블의 생성 스크립트, 제약조건, index 등도 같이 스크립팅 해서 줍니다.
그럼 99.999% 잡을 수 있을겁니다.
로그없이 에러처리 하는건 매우 어렵습니다. 예언자나 무당이 가능합니다. 쿨럭~ 화이팅!
-
sniper7000
2016.06.02 18:34
dbcc traceon(1222, 1204, -1) 를 실행시키기는 했는데..
로그파일뷰어로 로그를 보면 profiler를 통해 deadlock 걸린 sql문이 보이기는하는데..
어떻게 조치를 해야 하는지 모르겠습니다...TT
-
minsouk
2016.06.03 18:33
올려 달라는 로그를 올려주세요~ 그럼 조금 하시는 분들은 거의 다 잡을수 있습니다.
-
추억만이
2016.06.02 13:53
AND convert(date, ACT_DATE)='06/01/2016 00:00:00.000'에서 발생할 확률이 매우 높습니다.
ACT_DATE >= GETDATE() AND ACT_DATE < GETDATE()+1 로 해주고
ACT_DATE에 인덱스 하나 걸어주세요
-
sniper7000
2016.06.02 18:34
감사합니다.
말씀하신대로 적용해 보겠습니다.
혹시 위 UPDATE문 앞에 동일 테이블을 SELECT 하는 구문이 있나요?