2010년 12월 26일 일요일

InnoDB Double write buffer

Partial write 를 방지를 위한 이중화된 쓰기
  • 일반적으로 InnoDB의 페이지 사이즈는 16KB임
  • InnoDB에서 모든 페이지 형태로 관리되는 데이터에 적용됨
  • 페이지의 16KB중 일부만 Disk에 기록된 상태에서 장애 발생시 복구 또는 최악의 경우 Page 손상 방지
    -> 페이지 기록시 Double write buffer에 먼저 Page를 기록 후, 실제 대상 Page의 내용 변경
    -> 만약, Double write buffer를 기록하던 중 장애 발생시에는 해당 페이지의 변경 무시
    -> InnoDB 기동 시, Double write buffer의 내용은 실제 대상 Page의 내용과 비교되며,
        이 과정에서 기록된 Page의 내용이 Partial write이면 Double write buffer를 이용해서 복구
  • Sequential I/O로 처리되므로, Disk I/O가 2배가 되지는 않음
  • 하지만, 이런 현상이 얼마나 발생하는지는 잘 예측 불가(현재까지는 본적이 없음)
  • 가능성이 낮은 장애를 위해서 매번 2번씩 Disk write를 허용할 것인지는 중요한 선택임
  • Master / Slave의 용도 또는 데이터의 중요도에 맞게 선택 적용하는 것도 좋은 정책임
  • ZFS와 같이 File System 차원에서 원자(Atomic) 단위의 Write를 지원해주는 경우에는 필요 없음
  • innodb_doublewrite=0 설정을 통해서 Double write 비활성화 가능함

댓글 없음:

댓글 쓰기