전체 글 (77)
방명록
- [mysql] 언두 로그2025년 03월 26일 12시 10분 07초에 업로드 된 글입니다.작성자: @kimyu0218
🔗 [mysql] InnoDB 스토리지 엔진 훑어보기
MVCC는 Multi Version Concurrency Control의 약자로 멀티 버전에 대한 동시성을 제어한다. 멀티 버전은 하나의 레코드에 대해 여러 버전이 관리되는 것을 의미하며, 레코드 레벨 트랜잭션을 지원하는 DBMS에서 제공하는 기능이다. MySQL은 InnoDB의 언두 로그를 통해 MVCC를 구현한다.
언두 로그
언두 로그의 역할을 알아보기 전에 데이터가 변경되었을 때 어떤 일이 일어나는지 그림과 함께 살펴보자. 디스크의 데이터가 버퍼 풀의 페이지에 로드되어 있다.
1번 레코드의 이름은 고길동이다 UPDATE문을 수행하면 데이터 페이지가 새로운 값으로 갱신되며, 이전 값은 언두 로그로 복사된다.
데이터 페이지는 "홍길동"으로 갱신되고, 기존 이름 "고길동"은 언두 로그로 복사된다 이처럼 언두 로그는 이전 버전의 데이터를 백업하여 트랜잭션 과 격리 수준을 보장한다.
- 트랜잭션 보장 : 트랜잭션 롤백 시, 언두 로그에 백업해둔 이전 버전의 데이터를 이용해 복구한다.
- 격리 수준 보장 : 트랜잭션이 데이터를 변경하는 도중에 다른 트랜잭션에서 해당 데이터를 조회하면, 트랜잭션 격리 수준에 맞게 변경 중인 데이터를 읽지 않고 언두 로그에 백업해둔 데이터를 읽어서 반환한다.
언두 테이블스페이스
언두 로그가 물리적으로 저장되는 공간을 언두 테이블스페이스라 한다.
언두 테이블스페이스는 롤백 세그먼트로 구성된다. 트랜잭션이 데이터를 변경하면, 이전 데이터는 언두 로그에 기록되며, 이는 롤백 세그먼트 내에 저장된다. 언두 로그는 트랜잭션 아이디, 이전 데이터 값 등 변경 사항을 롤백하는 데 필요한 정보를 포함한다.
언두 테이블스페이스 TRUNCATE
특정 레코드를 수정한 후 트랜잭션을 커밋하고, 다른 트랜잭션에서 해당 레코드를 사용하지 않는다면 언두 로그는 더 이상 필요하지 않다.
TRUNCATE는 사용하지 않거나 과도하게 할당된 공간을 반납하는 작업이다. InnoDB는 언두 테이블스페이스의 공간을 절약하기 위해 자동과 수동 두 가지 모드를 제공한다.- 자동 모드 : InnoDB의 퍼지 스레드가 주기적으로 불필요한 언두 로그를 삭제한다. (Undo Purge)
- 수동 모드
'backend > 데이터베이스' 카테고리의 다른 글
[mysql] 언두 로그와 MVCC (0) 2025.03.28 [mysql] InnoDB 스토리지 엔진 훑어보기 (0) 2025.03.25 [redis] redisson으로 분산락 걸어서 동시성 문제 해결하기 (1) 2024.11.19 [mysql] 성능 최적화 3편 (데이터 크기) (0) 2024.02.13 [mysql] 성능 최적화 2편 (트랜잭션) (1) 2024.02.06 다음글이 없습니다.이전글이 없습니다.댓글