본문 바로가기
IT

[MSSQL] SET TRANSACTION ISOLATION LEVEL

by urosie 2018. 8. 1.

프로시저 앞부분에 항상 보던 구문, "SET TRANSACTION ISOLATION LEVEL"

평소엔 별 생각없이 복붙하면서 처리했는데요 갑자기 궁금해져서 한번 찾아봤어요.

 

SET TRANSACTION ISOLATION LEVEL 이문구는 격리 수준을 의미합니다.

이 문구 다음에 어느정도 격리를 할 건지에 대해서 명시를 해줘야 문장이 완성됩니다.

 

격리라는 것이 결국 잠금 수준을 의미하는 것이고 격리 수준은 총 5가지로 나눌 수 있습니다.

  • READ UNCOMMITTED
  • READ COMMITTED ( SQLServer 2008 기본 격리 수준 )
  • REPEATABLE READ
  • SNAPSHOT ( 비표준, MSSQLServer만의 격리 수준 )
  • SERIALIZABLE
  • 격리 수준은 위에서부터 아래로 강해진다고 합니다.

    즉 READ UNCOMMITTED가 가장 약하고, SERIALIZABLE가 가장 강합니다.

     

    제가 운영하고 있는 시스템 프로시저들은 모두 가장 약한 수준으로 코딩되어 있네요!

    각 격리 수준 별로 잘 정리되어 있는 자료를 가져와봤습니다.

    (출처 : http://egloos.zum.com/sweeper/v/3005129 )

    격리 수준

    커밋되지 않은 읽기

    반복되지 않는 읽기

    가상

    READ UNCOMMITTED

    READ COMMITTED

    아니요

    REPEATABLE READ

    아니요

    아니요

    SNAPSHOT

    아니요

    아니요

    아니요

    SERIALIZABLE

    아니요

    아니요

    아니요

     

     

    READ UNCOMMITTED 는 커밋되지 않는 데이터를 읽을 수 있어서 데이터 무결성을 깨뜨릴 수 있지만

    동시성이 향상되는 효과가 크기 때문에 자주 사용된다고 하네요.

     

    그래도 무결성이 중요한 데이터는 이 구문을 그대로 쓰면 안될 듯 합니다.!

     

     

     

    댓글