MySQL에서 트랜잭션이 수행되는 원리/과정
트랜잭션이란
DB의 상태를 변화시키는 여러 작업을 논리적으로 하나의 단위로 묶어버리는 것
동작 과정

트랜잭션 수행 과정
- 트랜잭션 시작
- UPDATE member SET area = ‘경기’ WHERE id = 12 ;
- InnoDB 버퍼풀에 데이터를 쓴다.
- 디스크의 언두/리두 로그에 서로 다른 데이터를 기록한다.
- 언두 로그 : 트랜잭션 수행 전의 데이터
- 리두 로그 : 쿼리를 통해서 변경한 데이터를 기록 ( 예시 : member.12.area “서울” → “경기” )
- 트랜잭션 끝
- 트랜잭션 이후 백그라운드 스레드가 디스크에 Flush
정리
- 트랜잭션에서는 디스크에 Flush까지가 아닌 메모리( InnoDB 버퍼풀 )에 쓰고 디스크의 언두/리두 로그에 기록하는 것까지만 포함한다.
- 디스크는 이후에 백그라운드 스레드가 알아서 처리하고 Flush한다.
어차피 변경 내용을 리두 로그에 쓰기 위해서 디스크에 I/O하는데 바로 데이터를 쓰지 않는 이유가 뭘까 ?
- 리두 로그에 쓰는 비용이 훨~~씬 싸기 때문이다.
- 디스크에 쓸 때는 수많은 데이터 중에서 Member의 ID가 12인 곳까지 접근해서 써야하는 비용이 있다.
만약 더 많은 데이터를 하나의 트랜잭션에서 쓴다면? 비용이 몇 배로 많아질 것이다.
- 언두 로그는 그냥 변경된 내용을 로그의 뒤에 붙이기만 하면된다. ( Append Only = O(1) )