MSSQL LOCK
:::::[잠금(LOCK)의 크기(범위)]:::::
종류 | 기능 | |
RID(ROWID)행단위 | 아무런 인덱스가 없을 때 한 행에 대해 LOCK걸림 | |
KEY(INDEX) | 인덱스에 대해 LOCK이 걸릴 때 | |
PAGE | 해당페이지(8KB)의 모든데이터나 인덱스에 LOCK | |
EXTENT | 8개의 페이지 모이면 1EXTENT가 되는데 이 EXTENT에 대해서 LOCK | |
TABLE | 하나의 테이블에 모든 행 열 인덱스 페이지 EXTENT에 대해서 LOCK | |
DATABASE | 전체 DATABASE에 LOCK보통 스키마 변경시 발생 |
:::::[MSSQL2005 에서 잠금 (LOCK)보기]:::::
EXEC SP_LOCK : 서버에걸린모든잠금(LOCK)를보여줌
EXEC SP_LOCK : @@SPID : 실행시킨세션에서걸고있는LOCK정보보여줌
EXEC SP_WHO : BLOCKING에대한정보를보여줌
블로킹(BLOCKING)
A라는 사용자가 특정 테이블에 잠금을 걸어놓은 상태에서 B라는 사용자가 A가 잠금을 걸어놓은 테이블에 잠금을 걸려고 할 때 블로킹 발생
허바사장님이 아래와 같은 작업을 실행시킴
SET IMPLICIT_TRANSACTION ON
DBCC USEROPTIONS
BEGIN TRAN
DELETE FROM cloneRegion
DELETE FROM cloneOrders
--송미리사용자가하는작업
--cloneRegion 테이블에테이블을Lock걸기
Begin Tran
SELECT * FROM cloneRegion with(TABLOCK)
KILL 53(작업모니터에서 상태가 락걸린 프로세스ID를 확인후 킬시켜준다.)