본문 바로가기

MSSQL

[MSSQL] 트랜잭션의 격리 수준(isolation)

728x90

 트랜잭션의 격리 수준(isolation)이란 , 동시에 여러개의 트랜잭션이 처리되는 상황에서,

  트랜잭션이 다른 쪽 트랜잭션에서 처리중인 데이터를 읽어 올 수 있는 정도의 수준을 정해 놓은 것이다.

 

보통 4가지로 분류 한다.

 

READ UNCOMMITTED

READ COMMITTED

REPEATABLE READ

SERIALIZABLE

 

------------------------------------------------------------------------------------------------------------------------

 

READ UNCOMMITTED : 다른 트랜잭션의 처리가 COMMIT 또는 ROLLBACK  전에도 데이터를 읽어올 수 있다.

                                 다만 그로인해 읽어온 데이터의 정합성이 떨어질 수 있다.  DIRTY READ 현상

 

READ COMMITTED : 가장 기본적으로 사용되고 있는 격리 수준으로 다른 트랜잭션의 처리가 완료된 후에만

                             데이터를 읽어올 수있다. DIRTY READ 현상은 없지만 대기 시간이 길어질 수 있다.

 

REPEATABLE READ : 다른 트랜잭션이 UPDATE, DELTE 처리중이면, 데이터를 읽어올 수없지만, SELECT , INSERT 

                            처리중에는 읽어올 수 있다. 다만 PHANTOM READ ( INSERT된 데이터가 나중에 나타남 )

                            현상이 있을 수 있다.

 

SERIALIZABLE : 가장 엄격한 격리수준이다.  다른 트랜잭션이 UPDATE, DELTE , INSERT 처리중이면,

                       데이터를 읽어올 수없지만, SELECT 처리중에는 읽어올 수 있다.

                       가장 엄격하므로 동시처리 성능이 상대적으로 떨어진다. 

 

기타

 

 SNAPSHOP , READ COMMITTED SNAPSHOP 가 있는데 둘다  다른 트랜잭션 처리에 의해서 바뀐 정보는 조회되지 않는다. 다른 격리 수준과 다르게  데이터베이스 단위로 속성을에서 설정해 줘야한다.

물론 쿼리 창에서 명령어 실행가능 하다.

 

 

 

<사용방법>

 

예) SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED  

 

또는 

 

select * from [table] with(nolock) 시 with(nolock)은 격리 수준을 READ UNCOMMITTED 한다. 

728x90