2. DBMS이야기/01. PostgreSQL

[PostgreSQL] PostgreSQL 에서의 Transaction 종류1

OSSW(Open Source System SoftWare 2014. 6. 27. 14:28

1. 표준 트랜잭션 레벨

 

표준 트랜잭션에는 4가지 레벨이 있지만, PostgresSQL 에서는 3가지만 지원함.

 

 

  • Phenomena 종류

- dirty read : 트랜잭션이 현재 커밋되지 않은 트랜잭션에서 작성된 데이터를 읽는다.

- nonrepeatable read : 트랜잭션은 자신이 실행한 후, 최근 커밋된 다른 트랜잭션이 이전에 읽었던데이터를 수정했으면 그 데이터를 다시 읽는다.

- phantom read : 트랜잭션의 로우가 최근 커밋된 트랜잭션에서 변경되어서 조건을 만족시키는 로우의 집합이 변경된 경우, 로우의 집합을 다시 얻기위해 트랜잭션이 쿼리를 다시 실행한다.

 

  • 표준 SQL 트랜잭션 레벨

 

Isolation Level

Dirty Read

Nonrepeatable Read 

Phantom Read 

 Read Uncommited

가능함

가능함

가능함 

 Read Commited

불가능

가능함

가능함 

 Repeatable Read

불가능

 불가능 

가능함

 Serializable

불가능

불가능

불가능

 

 

2. PostgreSQL 에서의 트랜잭션 레벨

 

Read Commited Isolation Level (PostgreSQL 의 기본 레벨)

 

  • Select

- 쿼리 수행전 Commit 된 데이터만 참조할 수 있음

- 쿼리가 실행되는 도중에 Uncommit 된 데이터 또는 동싱에 실행되고 있던 트랜잭션에서 Commit 된 변경분은 참조하지 않는다.

- 외부 트랜잭션이 아닌 자신의 트랜잭션 도중에 일어난 Uncommit 된 수정 사항은 참조할 수 없음

- 트랜잭션 내부에서 Select 가 여러번 있을 때, 각 Select 쿼리 사이에 외부 트랜잭션이 Commit 을 했으면, Commit 된 다음에 실행된 Select 쿼리는 Commit 된 데이터를 참조한다.

 

  • Update, Delete, Select For Update, Select For Share 쿼리

- Select 쿼리와 동일하게 동작함

- 단지 데이터를 변경하는 도중에 다른 트랜잭션이 같은 로우에 접근하면 그 트랜잭션이 끝난 후에 변경사항에 대해서 작업을 진행한다.

- 이때, 외부 트랜잭션 때문에 변경된 로우가 현재 명령의 Where 조건에 맞는지를 다시 평가하게 된다.

- Read Commited 는 복잡한 검색 조건이 있는 상황에는 맞지 않고, 은행 잔고 변경같은 단순한 경우에 적합하다.

 

Repeatable Read Isolation Level

 

  • Select

- 현재 트랜잭션이 시작하기전에 Commit 된 데이터만 참조한다.

- 외부 트랜잭션에서 Commit 되거나, Uncommit 된 변경을 참조하지 않는다.

- 외부 트랜잭션이 아닌 자신의 트랜잭션 도중에 일어난 Uncommit 된 수정 사항은 참조할 수 있음.

 

- Read Commited 와의 차이점은 현재 트랜잭션에 여러번의 쿼리가 발생할 경우, 현재 트랜잭션의 쿼리 중간에 다른 트랜잭션에서 변경이 있었더라도 참조 하지 않는다.

- 또한 현재 트핸잭션이 시작되었을때의 데이터와 현재의 트랜잭션이 수행되던 도중에 일너난 변경사항만 참조한다.

 

- 이 레벨을 사용하게 되면 실패했을 때 재시도하는걸 Application 에서 처리해야 한다.

 

 

  • Update, Delecte, Select For Updatem Select For Share 쿼리

- 데이터를 변경하는 도중에 다른 트랜잭션이 같은 로우에 접근하면, 그 트랜잭션이 끝난후에 변경하려던 로우가 변경됐는지 확인한 후, 변경사항이 잇을시에는 에러메시지를 보내고 트랜잭션을 Rollback 한다.

 

 

Serializable Isolation Level

 

- 가장 엄격한 트랜잭션 레벨

- 트랜잭션들이 동시에 일어나지 않고, 하나씩 순서대로 실행되는 것 처럼 작동한다.

- Repeatable Read 레벨처럼 Application 에서 실패했을 때 재시도 처리를 해주어야 함.

- 잘못된 고려시 성능저하의 요인이 될 수 있다.

 

출처 : http://arisu1000.tistory.com

 

By. 백준

'2. DBMS이야기 > 01. PostgreSQL' 카테고리의 다른 글

Hot Backup  (0) 2014.06.29
PPAS Drita(성능 분석 툴) 설정 방법  (0) 2014.06.27
[PostgreSQL] PostgreSQL 통계 정보 보기  (0) 2014.06.25
PostgreSQL 백업 종류  (0) 2014.06.25
PostgreSQL Privilege Part.1  (0) 2014.06.15