[MySQL] MVCC와 언두 로그(Undo log)

2023. 8. 29. 23:40· MySQL
목차
  1. 💋 MVCC(Multi Version Concurrency Control)
  2. 💋 언두 로그(Undo log)
  3. ✔ 예시를 통한 언두 로그 설명 
  4. ✔ 다른 트랜잭션에서의 조회는 언두로그와 InnoDB 버퍼 풀 중 어느 곳의 데이터를 가져올까? 
  5. ✔ 언두 로그의 데이터는 몇 개까지 가능할까? 
  6. ✔ UPDATE 쿼리 실행 시 언두로그의 동작 방식 
  7. 💋 참고자료
반응형

 

 

💋 MVCC(Multi Version Concurrency Control)

  • 레코드 레벨의 트랜잭션을 지원하는 DBMS가 제공하는 기능
  • 배타적인 락을 사용하지 않으면서, 일관된 읽기를 제공하기 위한 목적 
  • 하나의 레코드에 대해 여러 개의 버전(Multi Version)이 동시에 관리됨. 
  • InnoDB는 언두 로그(Undo log)를 사용해 MVCC를 구현함.

 

 

💋 언두 로그(Undo log)

  • 트랜잭션 격리 수준 READ COMMITTED라고 가정
  • CREATE문을 통해 데이터베이스 내에 테이블은 이미 존재한다고 가정 

✔ 예시를 통한 언두 로그 설명 

1. INSERT INTO MEMBER (m_id, m_name, m_area) VALUES (12, '홍길동', '서울'); 실행하고 커밋함. 

2. UPDATE member SET m_area='경기' WHERE m_id=12; 실행하고 커밋하지 않음.

  • UPDATE문이 실행되면, 커밋 여부와 관계없이 InnoDB 버퍼 풀은 최신 값 '경기'로 업데이트

 

✔ 다른 트랜잭션에서의 조회는 언두로그와 InnoDB 버퍼 풀 중 어느 곳의 데이터를 가져올까? 

이 상태에서 다른 트랜잭션에서 SELECT * FROM member WHERE m_id=12; 실행한다면? 

  • 해당 쿼리로 작업 중인 레코드를 조회하면 어디에 있는 데이터가 조회될까?
    • MySQL 서버의 시스템 변수에 설정된 격리 수준에 따라 다르다! 
  • READ UNCOMMITTED - InnoDB 버퍼 풀의 현재 값 반환 (=경기)
  • READ COMMITTED 이상 - 언두 로그의 데이터 반환 (=서울)
    • 아직 커밋되지 않았기 때문 

 

✔ 언두 로그의 데이터는 몇 개까지 가능할까? 

  • 위의 예시에서는 2개의 버전만 유지하지만, 관리해야 하는 예전 버전의 데이터는 무한히 많아질 수 있음. 
    • 트랜잭션이 길어지면, 언두에서 관리해야 하는 예전 데이터가 삭제되지 못하고 오랫동안 관리해야 함. 
    • 언두 영역에서 저장하는 데이터 공간이 많이 늘어나는 상황이 발생할 수 있음. 

 

✔ UPDATE 쿼리 실행 시 언두로그의 동작 방식 

  • UPDATE 쿼리가 실행되면, InnoDB 버퍼 풀은 즉시 업데이트되고, 기존 데이터는 언두 영역으로 복사 
    • COMMIT을 실행하면, InnoDB는 현재 상태를 영구 데이터로 만듦.
      • 언두 영역의 백업 데이터를 필요로 하는 트랜잭션이 없어진 후에 언두 영역 데이터를 삭제함. 
    • ROLLBACK을 실행하면, InnoDB는 언두 영역에 백업된 데이터를 InnoDB 버퍼 풀로 복구하고, 언두 영역의 내용을 삭제함. 

 

 

💋 참고자료

  • Real MySQL 8.0 1편 4.2.3
도움이 되었다면, 공감/댓글을 달아주면 깃짱에게 큰 힘이 됩니다!🌟

 

반응형
저작자표시 비영리 변경금지 (새창열림)

'MySQL' 카테고리의 다른 글

[MySQL] 디스크 I/O: 하드 디스크 드라이브(HDD) VS 솔리드 스테이트 드라이브(SSD), 데이터베이스 성능 튜닝은 디스크 I/O를 줄이는 것이 관건!  (0) 2023.08.30
[MySQL] 트랜잭션의 격리수준: 이상 현상(Dirty Read, Non-Repeatable Read, Phantom Read)의 정의  (2) 2023.08.30
[MySQL] MySQL 엔진의 락 (Lock)  (0) 2023.08.15
[MySQL] MySQL 아키텍처: 접속 클라이언트, MySQL 엔진, 스토리지 엔진, 운영 체제, 하드웨어  (0) 2023.08.14
[MySQL] 트랜잭션: 트랜잭션의 개념, 주의사항, 트랜잭션 VS 락 (Real MySQL 8.0)  (0) 2023.08.13
  1. 💋 MVCC(Multi Version Concurrency Control)
  2. 💋 언두 로그(Undo log)
  3. ✔ 예시를 통한 언두 로그 설명 
  4. ✔ 다른 트랜잭션에서의 조회는 언두로그와 InnoDB 버퍼 풀 중 어느 곳의 데이터를 가져올까? 
  5. ✔ 언두 로그의 데이터는 몇 개까지 가능할까? 
  6. ✔ UPDATE 쿼리 실행 시 언두로그의 동작 방식 
  7. 💋 참고자료
'MySQL' 카테고리의 다른 글
  • [MySQL] 디스크 I/O: 하드 디스크 드라이브(HDD) VS 솔리드 스테이트 드라이브(SSD), 데이터베이스 성능 튜닝은 디스크 I/O를 줄이는 것이 관건!
  • [MySQL] 트랜잭션의 격리수준: 이상 현상(Dirty Read, Non-Repeatable Read, Phantom Read)의 정의
  • [MySQL] MySQL 엔진의 락 (Lock)
  • [MySQL] MySQL 아키텍처: 접속 클라이언트, MySQL 엔진, 스토리지 엔진, 운영 체제, 하드웨어
깃짱
깃짱
연새데학교 컴퓨터과학과 & 우아한테크코스 5기 백엔드 스타라이토 깃짱
반응형
깃짱
깃짱코딩
깃짱
전체
오늘
어제
  • 분류 전체보기
    • About. 깃짱
    • Weekly Momentum
      • 2024
    • PROJECT
      • AIGOYA LABS
      • Stamp Crush
      • Sunny Braille
    • 우아한테크코스5기
    • 회고+후기
    • Computer Science
      • Operating System
      • Computer Architecture
      • Network
      • Data Structure
      • Database
      • Algorithm
      • Automata
      • Data Privacy
      • Graphics
      • ETC
    • WEB
      • HTTP
      • Application
    • C, C++
    • JAVA
    • Spring
      • JPA
      • MVC
    • AI
    • MySQL
    • PostgreSQL
    • DevOps
      • AWS
      • 대규모 시스템 설계
    • frontend
      • HTML+CSS
    • NextJS
    • TEST
    • Industrial Engineering
    • Soft Skill
    • TIL
      • 2023
      • 2024
    • Linux
    • Git
    • IntelliJ
    • ETC
      • 日本語

블로그 메뉴

  • 홈
  • 깃허브

인기 글

최근 글

태그

  • TDD
  • 스트림
  • 컴포지션
  • Java
  • OOP
  • 우테코
  • Composition
  • 람다와스트림
  • 상속
  • 우테코5기
  • Stream
  • 레벨로그
  • 조합
  • 우아한테크코스5기
  • 람다
  • 우아한테크코스
  • 예외
  • 함수형프로그래밍
  • 상속과조합
  • lamda
hELLO · Designed By 정상우.v4.2.0
깃짱
[MySQL] MVCC와 언두 로그(Undo log)
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.