DBAgentServer 스레드로 0.25초 마다 한번씩 체크 프로시져로 체크 하여 (ODBC 로 연결 되어있습니다.)
번호 로그인 시도한 애가 있으면 해당 클라이언트로 로그인 되는 구조입니다.
문제는 잘 돌다가 하루나 이틀 후에
SQLExecDirect 에서 리턴 안되고 스레드가 멈춰 버립니다.
재현은 안되고 로그를 찍어보면
SQLExecDirect 들어간 후 나오질 않고 해당 스레드가 멈춰 버렸습니다.
프로시져 안에는 트랜잭션 하고 있으며
프로시져 안에는 lock 타임 아웃을 주었습니다 .
set nocount on
set lock_timeout 100
트랜잭션은 일부러 걸어서 테스트 해봤지만 같은 현상은 나오지 않았습니다.
한가지 의심스러운건 아래와 같이 번호 로그인 하려는 애가 있는지 체크 하는 셀렉트문에서
무한로딩 걸리는 현상을 본 적이 있습니다
select top 1 from dbo.LOGIN_Number_list LN
inner join dbo.LOGIN_CERTIFICATION LC on LC.fld_login_number = LN.fld_login_number
where LN.fld_done = 0
그 이후로 테스트 서버에서는 나오지 않아 못잡고 있는데
트랜잭션 안에 셀렉트 문에서 무한로딩으로 lock_timeout 으로 나오지도 않고 계속 멈춰 있을 가능성이 있는지 궁금합니다.
select 나 다른데서 lock 걸렸고
SQLExecDirect 에서 프로시져를 실행했는데 락이 걸려서 대기 하는거 같은데
문제는
sp_lock 이나 락 걸린 구문 체크 해봐도 뜨는게 없습니다...