데이터베이스 개발자 질문과 답변 게시판
데이터베이스 개발/운영 관련 질문과 답변을 올리는 게시판입니다. 궁금하신 내용을 이곳에서 문의하시면 SQLER 분들의 답변을 받으실 수 있습니다. 문의를 하실때에는 최근 작업하신 특이 사항이나, 장애 발생 전 상황을 상세히 올려 주시면 답글을 적어주시는 SQLER분들의 답변이 더 정확할 수 있으니 도움 되시길 바랍니다. 쿼리 문의일 경우, 실제 문제가 재현되는 테이블생성, 샘플데이터 생성 쿼리를 함께 올려 주시면 더 빠르고 정확한 쿼리 문의 응답이 가능합니다.
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 이나 락 걸린 구문 체크 해봐도 뜨는게 없습니다...