트랜잭션

Dophi·2023년 2월 20일
0

소개글

면접 대비겸 여러 블로그들을 참고하면서 정리해본 CS 지식들을 포스팅하고 있습니다.
만약 틀린 내용이 있다면 피드백은 언제나 환영합니다.
제 나름대로 요약한 내용이기 때문에 자세한 내용은 제일 아래쪽 참고 사이트에서 확인하면 좋을 것 같습니다!
말투는 편한 말투로 작성하니 양해 부탁드립니다.

트랜잭션

정의

데이터베이스의 상태를 변화시키기 위해 수행하는 작업 단위
SELECT, UPDATE, INSERT, DELETE 의 조합

특징

  • 원자성 - 모두 반영되거나 전혀 반영되지 않아야함
  • 일관성 - 작업 처리 후에도 처리 전과 일관되야함 (정수형은 계속 정수형, Null 제한 컬럼에는 Null 없어야함 등)
  • 독립성 - 각각의 트랜잭션은 서로 간섭없이 독립적으로 실행돼야함
  • 지속성 - 성공적으로 완료되면, 영구적으로 결과에 반영되어야함

연산

Commit

  • 하나의 트랜잭션이 성공적으로 끝났고 데이터베이스가 일관된 상태일 때 이를 알려줌

Rollback

  • 트랜잭션이 비정상적으로 종료되어 일관성을 깨트릴때 해당 트랜잭션의 모든 연산을 취소함

Undo

  • 수정된 페이지를 디스크에 썼는데, 잘못된 페이지일 경우 이전 상태로 되돌림
  • 2가지 정책
    • Steal → 수정된 페이지를 언제든지 디스크에 쓸 수 있음
      (undo를 위한 로그 저장 필요)
    • No-Steal → 트랜잭션이 끝날때까지 수정된 페이지를 버퍼에 저장했다가 디스크에 쓸 수 있음
      (undo 필요 없음, 버퍼가 커야함)

Redo

  • 커밋한 후에 수정된 페이지를 디스크에 반영함 (데이터베이스 백업으로 인한 복구에도 사용)
  • 2가지 정책
    • Force → 수정한 페이지를 커밋한 시점에 디스크로 반영
      (redo 필요없음)
    • No-Force → 수정한 페이지를 커밋한 시점 외에 디스크로 반영 가능
      (redo를 위한 로그 저장 필요)

Steal / No-Force 전략 주로 사용

  • Steal - 버퍼를 원하는 때에 비움으로써 메모리 활용 유연
  • No-Force - 디스크에 대한 접근을 유연하게 함으로써 I/O 연산을 줄임 (다른 트랜잭션이 해당 페이지에 접근할 때 또다시 디스크까지 갈 필요없음)

격리성 종류

Read Uncommited

  • 상대방이 커밋하지 않은 데이터도 조회 가능
  • A가 커밋하지 않은 데이터를 B가 읽을 수 있음 → Dirty Read

Read Commited

  • 상대방이 커밋한 데이터만 조회 가능
  • B가 데이터를 읽는 중에, A가 커밋해서 데이터를 바꿀 수 있음 → Non Repeatable Read

Repeatable Read

  • 한번 조회한 데이터는 트랜잭션 내에서 다시 조회해도 같은 값 (이미 있는 레코드만)
  • B가 데이터를 읽는 중에, A가 커밋해서 데이터를 추가할 수 있음 → Phantom Read

Serializable

  • 한 트랙잭션이 읽고 쓰는 레코드를 다른 트랜잭션이 절대 접근할 수 없음

참고 사이트

https://devjem.tistory.com/27
https://inor.tistory.com/15
https://velog.io/@yangsijun528/트랜잭션-격리-수준
https://sabarada.tistory.com/117

profile
개발을 하며 경험한 것들을 이것저것 작성해보고 있습니다!

0개의 댓글