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 |