본문 바로가기
코딩 공부 기록/SQL

[MSSQL] SQL Server 잠금(LOCK)의 종류

by Murphy0v0 2024. 12. 6.

격리 수준에 대해 공부하다가 잠금의 종류를 몰라서 내용 이해가 어려웠다.

그래서 격리 수준 공부 중단하고 잠금부터 공부...를..............................

 

1. 잠금의 종류


1) 공유 잠금 (Shared Lock, S)

  • 데이터를 읽을 때 사용되는 잠금이다.  (SELECT문)
  • 여러 트랜잭션이 동시에 데이터를 읽을 수 있지만, 데이터에 대한 수정은 불가능하다.
  • 여러 트랜잭션이 동시에 공유 잠금을 가질 수 있지만, 공유 잠금 동안 해당 데이터에 대한 배타적 잠금은 허용되지 않음. 

 

2) 배타적 잠금 (Exclusive Lock, X)

  • 데이터를 수정할 때 사용되는 잠금으로 INSERT, UPDATE, DELETE에서 사용된다.
  • 배타적 잠금이 설정된 데이터는 다른 트랜잭션이 읽거나 수정할 수 없고, 공유 잠금을 설정할 수 없다.
  • 트랜잭션이 완료되면 잠금이 해제된다.

 

3) 업데이트 잠금 (Update Lock, U)

  • 업데이트 잠금은 데이터에 대한 배타적 잠금을 요청하기 전에 설정된다. (UPDATE문)
  • 업데이트 잠금은 다른 트랜잭션이 해당 데이터에 대해 공유 잠금을 설정하는 것을 방지한다.
  • 배타적 잠금으로 전환될 수 있다.

(수정 작업의 가능성이 있으면 업데이트 잠금을 하고, 수정 작업이 실제 수행될 때 배타적 잠금이 설정됨)

 

4) 의도 잠금 (Intent Lock)

의도 잠금은 트랜잭션이 하위 수준의 잠금을 설정할 계획임을 나타낸다.

  • 의도 공유 잠금 (IS)
    • 테이블 수준에서 설정되는 잠금이며, 해당 테이블의 일부 행에 대해 공유 잠금을 설정함
    • IS 잠금이 설정된 테이블에 대해 다른 트랜잭션이 배타적 잠금을 설정할 수 없다.
    • 여러 트랜잭션이 동시에 IS 잠금을 가질 수 있다.
  • 의도 배타적 잠금 (IX)
    • 테이블 수준에서 설정되는 잠금이며, 해당 테이블의 일부 행에 대해 공유 잠금을 설정함
    • IX 잠금이 설정된 테이블에 대해 다른 트랜잭션이 공유 잠금을 설정할 수 없다.
    • IX 잠금은 IS 잠금과 함께 사용할 수 있고, 이는 하위 수준에서의 잠금 충돌을 방지한다.

 

5) 스키마 잠금 (Schema Lock)

  • 스키마 잠금은 데이터베이스 객체의 구조를 변경할 때 사용된다. (ALTER TABLE)
  • 스키마 공유 잠금은 다른 트랜잭션이 해당 객체를 읽을 수 있도록 허용하지만, 구조 변경은 허용하지 않음.
  • 스키마 배타적 잠금(Sch-X)은 해당 객체에 대한 모든 접근을 차단한다.

 

 

 

 

2. 각 잠금별 비교


 

'코딩 공부 기록 > SQL' 카테고리의 다른 글

[MSSQL] 테이블 복제 복사 방법  (0) 2024.12.12
[MSSQL] 격리 수준 (ISOLATION)  (2) 2024.12.09
[MSSQL] 통계 구성요소(Statistics)  (1) 2024.12.05
[SQL] 인덱스 조각화  (0) 2024.11.25
[MSSQL] 인덱스의 스캔 방식  (2) 2024.11.22