2022.02.01

Sejong Park·2022년 2월 1일
0

트랜잭션

  • 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

참고자료


profile
게으름뱅이 프로그래머

0개의 댓글

관련 채용 정보