트랜잭션
- RDB 이해도가 퇴화한것 같아서.. 다시 공부
- 트랜잭션은 애플리케이션에서 몇개의 읽기와 쓰기를 하나의 단위로 묶는 방법. 개념적으로 한 트랜잭션내에서 모든 읽기와 쓰기는 한 연산으로 실행된다. (데이터중심애플리케이션 설계 p.222)
mysql 격리수준은 4가지를 제공함
- READ UNCOMMITTED
- READ COMMITTED
- REPEATABLE READ
- mysql 의 기본 트랜잭션 격리수준으로 설정되어있음
- 트랜잭션을 시작한 뒤 데이터를 여러번 읽더라도 동일한 데이터를 반환함
- mySQL는 스냅숏에 커밋되기전의 데이터를 백업하고 있고, 해당 레코드를 반환
- SERIALIZABLE
- 하나의 트랜잭션이 데이터를 선점한경우 작업이 끝날때까지 읽기도 금지시킴
- 가장 강력한 격리수준
mysql에서 트랜잭션은 REDO로그와 UNDO로그를 이용하여 처리
- 트랜잭션이 실행될때 데이터캐시에 대상 레코드를 올리고
- REDO로그에 변경사항을 저장하고
- UNDO로그에 롤백에 대응하기 위한 기존값을 저장해둠
- 트랜잭션 커밋시 REDO를 결괏값을 반영하고, 롤백시에는 UNDD를 레코드에 반영함
각 격리조건을 설정하는 경우 dirty read, non-repetable read, phantom read에 대해서 함께 고려하여야 한다.
RDB마다 구현 전략역시 다르기에 각 벤더별로의 영향범위를 잘 생각후 처리가 필요하다.
https://www.postgresql.kr/blog/pg_phantom_read.html
참고자료