728x90
반응형
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
반응형
728x90
반응형

+ Recent posts