찢어진 쓰기 방지(torn write prevention)를 위해 Amazon EC2에서 워크로드 구성하기
찢어진 쓰기 방지(torn write prevention)를 위해 Amazon EC2에서 워크로드 구성하기
찢어진 쓰기 방지는 지원되는 인스턴스 유형의 지원되는 볼륨에서 기본적으로 활성화되어 있어요. 찢어진 쓰기 방지를 활성화하기 위해 추가 설정을 구성할 필요는 없습니다.
출처: 문서
본문
참고 — 찢어진 쓰기 방지를 지원하지 않는 워크로드는 성능 영향이 없어요. 이러한 워크로드에는 변경할 것이 없습니다.
찢어진 쓰기 방지를 지원하지만 사용하도록 구성되지 않은 워크로드는 이중화 버퍼(doublewrite buffer)를 계속 사용하며 성능 이점을 받지 못해요.
MySQL 또는 MariaDB 소프트웨어 스택을 구성해 이중화 버퍼를 비활성화하고 찢어진 쓰기 방지를 사용하려면 다음 단계를 완료하세요.
1. 볼륨을 BigAlloc 옵션과 함께 ext4 파일 시스템으로 구성하고 클러스터 크기를 설정
클러스터 크기를 4 KiB, 8 KiB 또는 16 KiB로 설정합니다. BigAlloc을 4 KiB, 8 KiB 또는 16 KiB 클러스터 크기와 함께 사용하면 파일 시스템이 각각의 경계에 맞춰 정렬된 파일을 할당합니다.
$ mkfs.ext4 -O bigalloc -C 4096|8192|16384 device_name
참고 — MySQL과 MariaDB의 경우 데이터베이스 페이지 크기에 맞추려면
-C 16384를 사용해야 해요. 할당 세분성을 페이지 크기의 배수가 아닌 값으로 설정하면, 스토리지 장치의 찢어진 쓰기 방지 경계와 맞지 않는 할당이 생길 수 있습니다.
예를 들어:
$ mkfs.ext4 -O bigalloc -C 16384 /dev/nvme1n1
2. InnoDB가 O_DIRECT 플러싱 방식을 사용하고 InnoDB doublewrite를 끄도록 구성
원하는 텍스트 편집기로 /etc/my.cnf를 열고 innodb_flush_method와 innodb_doublewrite 파라미터를 다음과 같이 업데이트합니다.
innodb_flush_method=O_DIRECT
innodb_doublewrite=0
중요 — Logical Volume Manager(LVM)나 다른 스토리지 가상화 계층을 사용한다면, 볼륨의 시작 오프셋이 16 KiB 배수로 정렬되어 있는지 확인하세요. 이는 스토리지 가상화 계층이 사용하는 메타데이터 헤더와 슈퍼블록을 고려해 기본 NVMe 스토리지에 상대적인 값입니다. LVM 물리 볼륨에 오프셋을 추가하면 파일 시스템 할당과 NVMe 장치의 오프셋 사이에 정렬 불일치가 생겨 찢어진 쓰기 방지가 무효화될 수 있어요. 자세한 내용은 Linux 매뉴얼 페이지의
--dataalignmentoffset을 참고하세요.