본문 바로가기
IT/MS SQL

mssql Lock 확인 및 대처

by heavenLake 2020. 6. 5.
반응형

 

조회 결과가 지나치게 안나올 때 한번쯤은 확인해 봐야할 Lock....

확인 방법을 알아 보겠습니다.

 

1. lock확인 명령어

   

    EXEC SP_LOCK   

    => mode 부분이 X표시된 것이 LOCK걸린거라 볼수 있다.

 

2. lock을 찾았다면 어떦쿼리 인지도 확인 가능하다.

   위에서 찾은 lock에 spid를 넣어주면 된다.

 

   DBCC INPUTBUFFER(spid)

 

3. lock 하늘나라로 보내드리기

 

   KILL spid

 

 

-- 참고 

EXEC SP_LOCK  으로 확인하다 보면 너무 많아서 찾기 힘들 때가 있다. 

그럴 때는 그냥 LOCK가 위심 되는 쿼리만 뽑을수 있다.

 

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

 

 

 

 

반응형

댓글