격리 수준에 대해 공부하다가 잠금의 종류를 몰라서 내용 이해가 어려웠다.
그래서 격리 수준 공부 중단하고 잠금부터 공부...를..............................
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 |