- Read Uncommitted
- 특징
- Nolock 힌트와 동일
- Select 구문의 이슈이다.
- Dirty Read - 다른 Transaction에서 변경이 되었지만 아직 Commit 명령이 아직 수행되지 않은 변경된 데이터(Dirty)를 읽어올 수 있음( 수정불가).
- 업무 시나리오
- Select구문에 대한 후속 작업에서 변경을 가하지 않는 로직에 적용
- Transaction이 빈번한 테이블에서 빠른 조회가 요구될 때
- 동시성에 대한 요구가 없는 작업에서
- Read Committed
- 특징
- 힌트가 없는 일반 문장
- 디폴트 격리수준
- Select 이슈.
- 다른 Transaction에서 변경 중인 데이터는 읽어 올 수가 없음
(다른 Transaciton에서 Commit 또는 Rollback 명령이 떨어지지 않는 한 실행된 Select구문은 대기 상태로 들어가게 됨). - 업무 시나리오
- 대부분의 일반 업무 시나리오.
- Repeatable Read
- 특징
- UPDLOCK힌트와 동일
- 자신의 Transaction의 Select이슈, 다른 Transaction의 Update 이슈
- 한 트랜잭션내에서 수행하는 select문은 항상 동일한 값을 반환함( 공유잠금유지)
- 즉, 자신의 Transaction하에서 Select된 로우에 대해 다른 Transaction이 읽어갈 수는 있지만 수정할 수 없음.
- 다른 Transaction이 같은 테이블의 다른 로우에 대한 변경, 추가, 삭제는 가능
- select * , 조건절 Select이나 테이블 스캔, 인덱스 스캔인 경우는 해당 테이블에 변경, 삭제가 불가능 하나 추가는 가능
- 업무 시나리오
- 같은 로우에 대한 동시 업데이트가 문제시 되는 업무 시나리오
- 같은 로우에 대한 Transaction이 빈번한 경우 Select구문에 대한 중요 정책이 필요할 때
- 예약, 발권 등의 같은 로우에 대한 동시 접근 시나리오.
- * Read Uncommitted와의 차이점은?
- Serializable
- 특징
- HOLDLOCK힌트와 동일하다.
- Repeatable Read 특징을 모두 포함.
- 조건 조회의 경우는 Repeatable Read와 동일
(해당 로우에 대해 다른 Transaction이 변경,삭제를 할 수 없음) - Select *, 조건조회이나 테이블 스캔, 인덱스 스캔의 경우 다른 Transaction에서 해당 테이블에 대해 변경, 삭제, 추가를 할 수 없음.
- 업무 시나리오
- 한 Transaction에서 발생된 Select구문의 데이터에 대한 완벽한 정확성을 반영하고자 할 때
- 대량의 데이터를 특정 로직으로 변경을 가하는 Import, Export, Bulk Copy 등의 배치 작업에서 데이터의 동시성이 중요시 되는 경우에 사용
- 해당 테이블에 동시 Transaction 수가 적을 때
- Transaction이 빈번한 대규모 시스템에서는 성능에 치명적인 영향을 미치므로 주의해서 사용
'IT 살이 > 04. 기술 - 인프라' 카테고리의 다른 글
Internet explorer 엔터프라이즈 모드 vs 도큐먼트 모드 사용 전략 (0) | 2015.10.06 |
---|---|
64비트 OS 전환 - Internet Explorer 11 표준환경 (0) | 2015.10.06 |
[메모] 네트워크 관련 토픽 블로그 (0) | 2010.03.12 |