Skip to the content.

Double Write Buffer

https://dev.mysql.com/doc/refman/8.0/en/innodb-doublewrite-buffer.html

개요


설명


저장 위치

MySQL 8.0.20 전에는 Double Write Buffer 영역이 InnoDB 시스템 테이블스페이스였으나 8.0.20 이후 별도의 테이블스페이스에 저장되고 저장되는 위치도 별도로 설정 가능

SHOW VARIABLES LIKE 'innodb_data_home_dir';


작동 방식

              -InnoDB Buffer Pool--
              |A| | | | | | | | | |
              | | | | | |D| | | | |
              | | |B| | | | | |C| |
              ---------------------
                        |
          -----------------------------
          | 1. 버퍼 영역에            | 2. 데이터 파일에 
         \|/   먼저 쓰고             \|/   하나씩 랜덤으로 씀
-Double Write Buffer-            -Data File-
|     |A|B|C|D|     |            |         |
---------------------            -----------

A부터 D까지의 Dirty Page를 디스크로 Flush 한다고 했을 때 InnoDB 스토리지 엔진은 실제 데이터 파일에 변경 내용을 쓰기 전, A부터 D까지의 Dirty Page를 묶어서 한 번의 디스크에 쓰기 작업으로 Double Write Buffer에 씀. 그 후 각각의 Dirty Page를 각각의 파일에 하나씩 랜덤으로 씀

만약 ‘A’와 ‘B’ 페이지는 정상적으로 기록됐는데 ‘C’ 페이지가 기록되는 도중에 장애가 발생했다고 가정했을 시 InnoDB 스토리지 엔진은 재시작 될 때 항상 Double Write Buffer 내용과 데이터 파일의 페이지들을 모두 비교해서 다른 내용을 담고 있는 페이지가 있다면 Double Write Buffer 내용을 데이터 파일의 페이지로 복사


관련 파라미터