[TIL 2021.08.09] 복수 커넥션에서 읽기와 쓰기 (트랜잭션)

Kyu·2021년 8월 9일
0

TIL

목록 보기
211/322

데이터베이스 첫걸음

트랜잭션

MySQL(InnoDB형 테이블)은 MVCC 라는 기술을 사용하고 있다. (Multi Versioning Concurrency Control)

트랜잭션 A, 트랜잭션 B가 있을때
기본적인 트랜잭션 격리 수준 Repeatable Read인 상태에서는
트랜잭션 도중에
1. 서로 읽기(select) 가능
2. 한쪽은 읽기 한쪽은 쓰기(insert,update,delete) 가능
3. 동시에 쓰기는 불가능
이다.

특징

  • 읽기의 내용은 격리수준에 따라 내용이 바뀔 수 있다.
  • 갱신시에는 잠금을 얻는다. 잠금은 기본적으로 행단위로 얻고 트랜잭션이 종료할떄까- 지 유지한다. 격리수준이나 InnoDB의 설정에 따라 잠금하는 행의 범위가 다른 경우가 있다.
  • 갱신과 갱신(쓰기와 쓰기)는 나중에 온 트랜잭션이 블락된다. 잠금이 풀릴떄까지 일정시간을 기다리는데 일정시간 후에는 잠금 타임아웃이 된다.
    Lock wait timeout exceeded 라는 문구가 뜸.
  • 갱신하는 경우 갱신 전의 데이터를 UNDO 로그로 "롤백 세그먼트"라는 영역에 유지한다. 이 UNDO 로그의 용도는 2가지이다.
    첫째는, 트랜잭션이 롤백시 갱신전으로 되돌리는 것이고,
    둘째는, 복수의 트랜잭션으로부터 격리 수준에 따라 대응하는 갱신 데이터를 참조하는데 이용한다. (읽기의 내용은 격리수준에 따라 내용이 바뀔 수 있다와 상응)

출처: page. 209

그 외

  • 데이터베이스 첫걸음은 트랜잭션 편부터 너무 재밌어지는거같다!ㅎㅎ

  • 데이터베이스 개론이 왓다! 첫걸음보다 1.5배정도 분량이 더 많다! 이정도면 할만하지!!!!!!!!ㅋㅋ라고 긍정적으로 생각하면서 ㅎㅇㅌ해보자!!

profile
TIL 남기는 공간입니다

0개의 댓글