2017. 12. 22. 16:23

SQL Lock 확인후 해제.

1. 락 확인 (Mode) 부분에 X 가 락이 걸린 spid 이다.


exec sp_lock


Mode의 상세 설명

     - S(shared lock) 공유잠금 : select문때 데이터를 동시에 읽을 때 걸리는 형태, 동시에 select 가능

     - U(Upate lock) 업데이트 잠금 : 업데이트 할 수 있는 리소스에 사용, 여러 사용자가 업데이트 할 때 발생하는 

                                               교착 상태 방지.

     - X(Exclusive lock) 베타잠금 : 데이터의 Insert / Update / Delete 시에 사용, 동시에 불가능 호환 불가, 동시에

                                            같은행 변경 불가.

     - IS : 의도공유

     - IU : 의도 업데이트

     - IX : 독점의도

     - Bu(Bulk Update lock) 대량 업데이트 잠금 : 데이터를 데이블로 대량 복사하는 경우와 Tablock 힌트가 

                                                               지정된 경우 사용



2. Spid 의 값을 넣어주면 현재 어떤 쿼리인지 확인해준다.

  spid 값 51 일경우


dbcc inputbuffer(51)



3. Lock 를 킬해준다.


Kill 51


4. 자세한정보 확인

exec sp_who2 51




5. Lock 의심되는 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