2017. 12. 22. 16:23
SQL Lock 확인후 해제.
2017. 12. 22. 16:23 in SQL
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