반응형
mysql을 사용하면서 update시 어떻게 내부 동작을 하는지 궁금증이 생겨 알아보았습니다.
내부 동작이 어떻길래 각각의 트랙젝션의 설정에 따라서 데이터를 가져올 수 있는지 한번 찾아본 내용을 공유합니다.
참고한 책은 'real mysql 8.0' 입니다.
트랜잭션이 begin 이후
update query가 동작하면
commit까지 해당 데이터는 반영되지 않고
버퍼풀에 남게 됩니다.
기존의 데이터는 언두 로그에 기록되고 (사진 속 '서울')
새로운 데이터는 버퍼풀에 기록되는데 (사신 속 '경기')
만약 commit을 하게되면 퍼퍼풀의 데이터를
innodb의 기록용 스레드가 디스크에 남기게 됩니다.
반대로 rollback을 하게된다면 언두 로그에 기록된 데이터를
버퍼풀로 다시 가져오는 작업을 진행합니다.
그렇기 때문에 대량의 데이터를 한번에 update 진행 중 취소하게 되면
바로 취소되지 않고 시간이 걸리는 이유는 이 작업때문이라고 할 수 있습니다.
이러한 동작이 있기 때문에
우리가 사용하는 isolation level에 따라 다른 결과를 받을 수 있습니다.
격리레벨에 따른 동작은 다른 포스트에서 정리해보겠습니다.
↑ 해당 글
참고서적
반응형
'컴퓨터' 카테고리의 다른 글
트랜잭션 격리 수준이란? (transaction isolation level) (0) | 2023.12.30 |
---|---|
intellij project view 경로 숨기고 branch만 표시하는 법 (0) | 2023.03.17 |
좌표계 변환 - proj4 [행정안전부 -> 카카오 좌표체계 변환] (0) | 2021.04.03 |