16KB 영구 디스크 및 MySQL 관련 권장사항

이 문서에서는 물리적 블록 크기가 16KB인 영구 디스크를 사용하여 MySQL 데이터베이스의 성능을 높이는 방법을 설명합니다.

MySQL 작업 부하에 쓰기가 많은 경우 일반적으로 InnoDB doublewrite 버퍼를 사용 중지하면 이점이 있습니다. MySQL의 InnoDB는 파손된 페이지를 복구할 수 있도록 더티 페이지를 플러시하는 프로세스 중에 이중 쓰기를 수행합니다.

그러나 엔드 투 엔드 16KB 원자적 쓰기 경로가 있다면 16KB 데이터 페이지가 디스크에 부분적으로 커밋되지 않으므로 이중 쓰기를 수행할 필요가 없습니다. 이중 쓰기를 사용 중지하면 데이터베이스의 더티 페이지 플러시 능력이 근본적으로 두 배로 강화되므로 데이터베이스가 동기화 플러시 상태가 되는 빈도가 감소하여 성능이 안정화되고 성능 향상도 가능합니다.

시작하기 전에

데이터베이스에서 블록 기기로 16KB 원자적 쓰기 경로 구축

16KB 영구 디스크를 활용하면 데이터베이스에서 블록 기기로 엔드 투 엔드 16KB 원자적 쓰기 경로를 구축하여 MySQL/InnoDB의 이중 쓰기 기능을 안전하게 사용 중지하고 쓰기가 많은 작업 부하의 성능을 안정화 및 개선할 수 있습니다.

Google Cloud Platform Console, gcloud 도구 또는 API를 통해 영구 디스크를 만들고 연결합니다.

  1. 16KB 블록 크기 영구 디스크를 만들고 VM에 연결합니다. 16KB 영구 디스크는 물리적 블록 수준에서 16KB 쓰기 원자성을 제공합니다. 필수는 아니지만, MySQL 인스턴스가 16KB 영구 디스크에만 데이터 파일을 저장하도록 구성하는 것이 좋습니다. 로그 파일, 특히 redo 로그 및 binlogs는 같은 VM에 연결된 4KB 영구 디스크에 저장하세요. 이렇게 하면 로그 파일 쓰기에 높은 성능이 유지됩니다. 작은 로그를 16KB 영구 디스크에 기록하면 읽기-수정-쓰기가 많이 발생하여 속도가 느려질 수 있습니다.

  2. ext4 파일 시스템과 BigAlloc 옵션을 사용하여 16KB 디스크를 포맷하고 클러스터 크기를 16KB로 설정합니다. 다음은 mkfs 명령어에 BigAlloc 옵션을 지정한 예입니다.

    mkfs.ext4 -O bigalloc -C 16384 [...other options…]
    

    16KB 클러스터 크기로 BigAlloc을 사용하면 파일 시스템이 디스크의 16KB 경계에 맞도록 파일을 할당합니다.

  3. VM 인스턴스를 만들 때 cos-cloud 프로젝트의 Google Container-Optimized OS 이미지 계열에서 OS 이미지를 선택합니다.

    gcloud 명령어를 사용하여 사용 가능한 cos 이미지의 목록을 확인합니다.

    gcloud compute images list --project cos-cloud --no-standard-images
    

    버전 67 이상을 선택합니다. 더 나은 결과를 얻으려면 cos-stable 계열에 속하는 이미지를 선택하시기 바랍니다.

    cos 이미지를 선택하면 파일 시스템 간 레이어와 물리적 블록 기기 레이어에서 쓰기가 16KB 경계 간에 부적절하게 분할되지 않습니다. cos 이미지 검증 프로세스에는 이 결과를 보장하는 테스트가 내장되어 있습니다.

  4. OS에서 max_segmentsmax_sectors_kb가 올바르게 구성되었는지 확인합니다.

    max_segments >= max_sectors_kb/4
    

    이러한 두 변수는 모든 Google Compute Engine VM에 이미 구성되어 있습니다. VM 생성 후 이러한 두 변수를 변경하는 스크립트가 없는 경우 이 단계를 건너뛰어도 됩니다.

    다음 경로에서 OS의 이러한 두 상수를 쿼리할 수 있습니다.

    /sys/block/sd<drive letter>/queue/
    
  5. O_DIRECT를 사용하도록 InnoDB를 구성합니다. innodb_flush_method 데이터베이스 구성에 O_DIRECT를 설정하거나 추가합니다.

이제 innodb_doublewrite 옵션을 안전하게 중지할 수 있습니다.

이 방법은 16KB 블록 기기를 사용하여 엔드 투 엔드 원자적 쓰기를 보장하는 유일한 방법은 아닙니다. 예를 들어 파일 시스템을 사용하지 않고 블록 기기를 원시 기기로 직접 사용하도록 데이터베이스를 구성하면 파일 시스템 구성을 설명하는 위 단계를 건너뛸 수 있습니다.

다음 단계

이 페이지가 도움이 되었나요? 평가를 부탁드립니다.

다음에 대한 의견 보내기...

Compute Engine 문서