[MySQL] Double Write 버퍼

신찬규·2024년 7월 8일

MySQL

목록 보기
12/13

MySQL에서 리두 로그는 리두 로그의 용량을 줄이기 위해 데이터 페이지의 변경 사항만 기록한다. 그렇기 때문에, 리두 로그가 존재하더라도 MySQL에서 더티 페이지를 디스크로 쓸 때 예기치 못한 오류로 인해 MySQL가 종료되어 페이지의 일부분만 기록하는 파셜 페이지(Partial page) 또는 톤 페이지(Torn page) 현상이 발생한다면 데이터 페이지 복구가 불가능할 수 있다.

MySQL은 이러한 문제를 Dobule Write 버퍼를 이용해 해결한다. Double Write란, 더티 페이지들을 디스크에 하나씩 랜덤 I/O로 쓰기 전에 버퍼에 묶음으로 한 번의 순차 I/O로 쓰는 것을 말한다. 이로 인해 MySQL이 예기치 못한 오류로 종료되더라도 Double Write 버퍼에 존재하는 내용으로 파셜 페이지 또는 톤 페이지의 복구가 가능하다.

Dobule Write 버퍼는 순차 I/O가 랜덤 I/O 보다 효율적인 HDD에서는 효율적이지만, 두 I/O의 비용이 비슷한 SDD에서는 비효율적일 수 있다. 데이터 무결성이 매우 중요한 서비스에는 Dobule Write 버퍼를 사용하는 것이 좋지만, 그렇지 않은 경우 비활성화 하는 것이 성능에 좋을 것이다.

참고 자료

profile
느려도 조금씩 꾸준하게

0개의 댓글