728x90
반응형

MSSQL을 사용하다 보면 select를 하고 싶은데 조회 결과가 나오지 않거나 타임아웃에 걸려 커넥션이 끊어지는 경우가 잇습니다.

테이블에 락이 걸려서 이런 현상이 발생하곤 하는데요.

MSSQL의 경우 여러 사용자 중 한명이 락이 걸린 경우 역시 조회가 되지 않는다고 하네요.


락 걸린 쿼리를 조회하여 강제로 kill하는 방법에 대해 알아보겠습니다.


1. sp_lock 실행

 Mode값이 X인 경우 락이 걸린 것인데 이때 spid를 확인합니다.

 


2. 락 걸린 쿼리 조회

 dbcc inputbuffer(87)


3. spid이용하여 kill하기

 kill 87


락으로 의심되는 spid 조회하기


SELECT p.status ,p.program_name ,p.hostname ,p.spid ,p.blocked ,p.kpid

    ,p.cpu ,p.physical_io ,p.waittype ,p.waittime ,p.lastwaittype

    ,p.waitresource ,p.dbid ,p.uid ,p.memusage ,p.login_time ,p.last_batch

    ,p.ecid ,p.open_tran ,p.sid ,p.hostprocess

    ,p.cmd ,p.nt_domain ,p.nt_username ,p.net_address

    ,p.net_library ,p.loginame ,p.context_info ,p.sql_handle

    ,p.stmt_start ,p.stmt_end

FROM master..sysprocesses p

WHERE (

        STATUS LIKE 'run%'

        OR waittime > 0

        OR blocked <> 0

        OR open_tran <> 0

        OR EXISTS (

            SELECT *

            FROM master..sysprocesses p1

            WHERE p.spid = p1.blocked

                AND p1.spid <> p1.blocked

            )

        )

    AND spid > 50

    AND spid <> @@spid

ORDER BY CASE

        WHEN STATUS LIKE 'run%'

            THEN 0

        ELSE 1

        END

    ,waittime DESC

    ,open_tran DESC

728x90
반응형

+ Recent posts