안규 공부방

MS-SQL > Transaction & Lock - Transaction Isolation Level

등록일 : 2017-07-03 19:42 조회수 : 67,603

^^;
오늘은 Transaction isolation Level 에 대해서 간단히 알아보고 싶네여.
 
이것은,,, 락의 옵션을 조정할수 있게 해 주는걸 말하는건데여. 현재 접속해서 사용하는 유저에게
특정 쿼리를 실행할때 락이 걸리지 않게 하거나, 걸리는 락의 종류 및 지속성 같은것들을
결정하게 하는 것입니다.
 
기본값은 READ COMMITTED로 설정되어 있습니다.
 
  9.5.1 Transaction isolation Level 종류
 
1. READ COMMITTED
   기본값으로 트랜잭션이 완료되어 확정된 데이터 영역만 읽을 수 있습니다.


   위의 그림에서 알수 있듯이... 오른쪽에 어떤 값을 업데이트하는 트랜잭션이
   발생되어 있는 상태에서 다른 유져가 select 를 눌렀을때, 결과는 나오질 않고
   대기 상태에 있습니다. 왜냐하면 그 트랜잭션이 commit을 할지 rollback을 할지
   현재 상태에서는 알수가 없기 때문이지요.
  
   Read Committed는 SQL Server의 기본 설정으로 Uncommitted에 비해 데이터 일관성
   유지에 좋습니다.

2. READ UNCOMMITTED
   트랜잭션 처리중의 데이터, 즉, Dirty Page데이터를 읽을수 있게 해 줍니다.
  


   우선 왼쪽 커넥션에서 트랜잭션을 시작하고 Update를 실행하였습니다.
   그리고 커밋할지 롤백할지는 아직 모릅니다.
   오른쪽 커넥션에서 Set Transaction Isolation Level Read Uncommitted라고 하여 Read
   Uncommitted상태로 설정하고 Select를 하였습니다.
   아직 커밋이나 롤백할지를 모르지만 그냥 Dirty Page를 읽어들여서 사용자에게 보여주고
   있습니다.
   만약 Update가 롤백이 되었다면 오른쪽의 결과를 가지고 작업을 할 경우 데이터의 일관성이
   깨지게 됩니다.
   Read Uncommitted는 데이터의 일관성 유지에는 가장 나쁘지만 동시 사용률은 가장 좋습니다.


3. REPEATABLE READ
   이 옵션은 트랜잭션 내에서 동일한 레코드를 읽기 작업 할 경우에 항상 같은 값을 읽을수 있도록 보장해
   줍니다. 이것은 내부적으로 한번 select 한 모든 레코드에 걸리는 Shared Lock이 데이터를 읽은후에도
   트랜잭션이 끝날때까지 계속 남아있게하여 다른 사용자가 수정할수 없게 해줍니다.


  
   위의 그림을 보면 아시겠지만
   Set Transaction Isolation Level REPEATABLE READ 옵션을 설정하였습니다. 위 상태에서 select를
   실행합니다.
  
   만약 오른쪽의 사용자가 update 를 실행하면 어떻게 될까여??? 당연히 여기에서는 Shared Lock 이
   되어 업데이트 되질 않습니다. 그러나, insert 는 되지요.
  
   dbcc useroptions 명령은 현재 옵션설정 상태를 보여줍니다.

  
4. SERIALIZABLE
   SERIALIZABLE 설정은 네가지 레벨중에서 가장 제약이 많은 옵션으로 select 되는 영역내에 락이 걸려 다른
   사용자가 수정할수  없을 뿐만 아니라 해당 영역 내부로는 레코드를 추가할수도 없게 만들어 항상 동일한
   데이터 영역  을 가지게 만든다.
 
※ 혹시 도움이 되셨다면 댓글에 한마디 남겨주세요!
작성자   비밀번호
자동글 방지     (자동글 방지 기능입니다.)
내용   댓글달기 
이메일 문의 : cak0280@nate.com  
Copyright 2000 By ENTERSOFT.KR All Rights Reserved.