PostgreSQL Transaction isolation level

대다수 DB MS에서는 Transaction의 고립화 수준을 표준에 따르도록 설계되여 있다. 이번 글에서는 그 고립화 수준에 대해 정리해 보자

Transaction isolation level

  • Read Uncommitted
    Transaction 처리 중이고 아직 Commit 되지 않는 내용도 읽을 수 있다. 이 레벌에서는 Dirty read가 발생한다. Transaction에서 처리하다가 문제 생겨서 roll back 하는 경우 만약 다른 곳에서 roll back한 데이터를 읽는다면 큰 문제가 생길 수 있다. PostgreSQL에서는 이 level을 지원하지만 PGSQL에서 지원하지 않으므로 공식적으로 지원하지 않는 레벨이다.
  • Read Committed
    모든 읽은 데이터는 Commit된 데이터를 보장하는 Level이다. 대부분 DBMS에서는 이 level를 default로 사용하며 PostgreSQL도 이것을 기본으로 한다. Non-Repeatable Read, Phantom Read 현상은 발생.
    - Non-Repeatable Read: 한 Transaction 내에서 같은 쿼리를 두번 실행 할 경우, 그 사이에 다른 Transaction이 값을 수정 또는 삭제 함으로써 두 쿼리의 결과 값이 상이 한 경우
    - Phantom Read: 한 Transaction 내에서 일정 범위의 레코드를 두번 이상 조회 할때, 조화한 결과에 없던 유령(Phantom) 레코드가 생기는 현상.
  • Repeatable Read
    Transaction의 동작이 종료 될때까지 일관성 있는 데이터를 보여준다. 레코드 레벨에서 lock를 발생시키므로 중간에 만약 select문의 조건에 맞는 레코드가 추가되는 경우 Phantom Read가 발생 한다.
  • Serializable Read
    모든 작업을 하나의 Transaction이 처리하는 것과 동일한 수준으로 처리한다. 가장 높은 고립 수준을 제공하는 대신에 DB의 성능에도 영향을 많이 주겠죠.

'DataBase' 카테고리의 다른 글

[Database] DynamoDB GSI 사용  (0) 2021.12.19
[DynamoDB] Spring에서 DynamoDB 사용  (0) 2021.12.16
ORM 장단점  (0) 2021.12.12
Postgres Failover 방법  (0) 2021.12.12
PostgreSQL 설치부터 이중화까지  (0) 2021.12.12