Aurora MySQL에서 병렬 쿼리 최적화 - Amazon Aurora

Aurora MySQL에서 병렬 쿼리 최적화

병렬 쿼리에 대해 DB 클러스터를 최적화하려면 병렬 쿼리의 이점을 누릴 수 있는 DB 클러스터와 병렬 쿼리 업그레이드 여부를 고려해야 합니다. 그런 다음 워크로드를 조정하고 병렬 쿼리를 위한 스키마 객체를 생성합니다.

병렬 쿼리 클러스터 계획

병렬 쿼리가 설정된 DB 클러스터를 계획하려면 몇 가지 선택이 필요합니다. 여기에는 설정 단계(전체 Aurora MySQL 클러스터 생성 또는 복원)를 수행하고 DB 클러스터에서 병렬 쿼리를 설정할 범위를 결정하는 작업이 포함됩니다.

계획 과정에서 다음과 같은 사항을 고려해야 합니다.

  • MySQL 5.7과 호환되는 Aurora MySQL을 사용하는 경우 Aurora MySQL 2.09 이상을 선택해야 합니다. 이 경우 항상 프로비저닝된 클러스터를 생성합니다. 그런 다음 aurora_parallel_query 파라미터를 사용하여 병렬 쿼리를 설정합니다.

    버전 2.09 이상을 실행하는 기존 Aurora MySQL 클러스터가 있는 경우 병렬 쿼리를 사용하기 위해 새 클러스터를 생성할 필요가 없습니다. 클러스터 또는 클러스터의 특정 DB 인스턴스를 aurora_parallel_query 파라미터가 설정된 파라미터 그룹에 연결할 수 있습니다. 이렇게 하면 병렬 쿼리와 함께 사용할 관련 데이터를 설정하는 데 드는 시간과 노력을 줄일 수 있습니다.

  • 테이블에 액세스할 때 병렬 쿼리를 사용할 수 있도록 재구성해야 하는 대형 테이블이 있는지 확인하고 조치를 취합니다. 병렬 쿼리가 유용한 일부 대형 테이블의 경우 새 버전을 만들어야 할 수도 있습니다. 예를 들어 전체 텍스트 검색 인덱스를 제거해야 할 수 있습니다. 세부 정보는 병렬 쿼리를 활용하기 위해 스키마 객체 생성을 참조하세요.

병렬 쿼리를 위한 Aurora MySQL 버전 호환성 확인

병렬 쿼리 클러스터와 호환되는 Aurora MySQL 버전을 확인하려면 describe-db-engine-versions AWS CLI 명령을 사용하고 SupportsParallelQuery 필드의 값을 확인합니다. 다음 코드 예제는 지정된 AWS 리전에서 병렬 쿼리 클러스터에 사용할 수 있는 조합을 확인하는 방법을 보여줍니다. 한 줄에 전체 --query 파라미터 문자열을 지정해야 합니다.

aws rds describe-db-engine-versions --region us-east-1 --engine aurora-mysql \ --query '*[]|[?SupportsParallelQuery == `true`].[EngineVersion]' --output text

위의 명령은 다음과 비슷한 출력을 생성합니다. 출력은 지정된 AWS 리전에서 사용 가능한 Aurora MySQL 버전에 따라 달라질 수 있습니다.

5.7.mysql_aurora.2.11.1 8.0.mysql_aurora.3.01.0 8.0.mysql_aurora.3.01.1 8.0.mysql_aurora.3.02.0 8.0.mysql_aurora.3.02.1 8.0.mysql_aurora.3.02.2 8.0.mysql_aurora.3.03.0

클러스터에서 병렬 쿼리를 사용하기 시작한 후 성능을 모니터링하고 병렬 쿼리 사용에 대한 장애 요소를 제거할 수 있습니다. 해당 지침은 병렬 쿼리를 위한 성능 튜닝 단원을 참조하십시오.

병렬 쿼리를 위한 업그레이드 고려 사항

병렬 쿼리 클러스터를 업그레이드할 때 원래 버전과 대상 버전에 따라 병렬 쿼리가 최적화할 수 있는 쿼리 유형을 개선할 수 있습니다. 병렬 쿼리에 특수 엔진 모드 파라미터를 지정하지 않아도 될 수 있습니다. 다음 섹션에서는 병렬 쿼리가 설정된 클러스터를 업그레이드하는 경우 고려 사항에 대해 설명합니다.

Aurora MySQL 버전 3에 병렬 쿼리 클러스터 업그레이드

여러 SQL 문, 절 및 데이터 유형에는 Aurora MySQL 버전 3부터 새로운 병렬 쿼리 지원 또는 향상된 병렬 쿼리 지원이 있습니다. 버전 3 이전 릴리스에서 업그레이드하는 경우 추가 쿼리가 병렬 쿼리 최적화를 통해 이점을 얻을 수 있는지 확인합니다. 이러한 병렬 쿼리 개선 사항에 대한 자세한 내용은 열 데이터 유형, 분할된 테이블집계 함수, GROUP BY 절 및 HAVING 절 섹션을 참조하세요.

Aurora MySQL 2.08 이하에서 병렬 쿼리 클러스터를 업그레이드하는 경우 병렬 쿼리를 설정하는 방법의 변경 사항에 대해서도 알아봅니다. 이렇게 하려면 Aurora MySQL 2.09 이상으로 업그레이드 섹션을 참조하세요.

Aurora MySQL 버전 3에서 해시 조인 최적화는 기본적으로 설정되어 있습니다. 이전 버전의 aurora_disable_hash_join 구성 옵션은 사용되지 않습니다.

Aurora MySQL 2.09 이상으로 업그레이드

Aurora MySQL 버전 2.09 이상에서는 병렬 쿼리가 프로비저닝된 클러스터에 대해 작동하며 parallelquery 엔진 모드 파라미터가 필요하지 않습니다. 따라서 이러한 버전에서 병렬 쿼리를 사용하기 위해 새 클러스터를 생성하거나 기존 스냅샷에서 복원할 필요가 없습니다. Aurora MySQL DB 클러스터의 부 버전 또는 패치 수준 업그레이드에 설명된 업그레이드 절차를 사용하여 클러스터를 이러한 버전으로 업그레이드할 수 있습니다. 병렬 쿼리 클러스터인지 또는 프로비저닝된 클러스터인지에 관계없이 이전 클러스터를 업그레이드할 수 있습니다. 엔진 버전 메뉴에서 선택 항목 수를 줄이려면 병렬 쿼리 기능을 지원하는 버전 표시를 선택하여 해당 메뉴의 항목을 필터링할 수 있습니다. 그런 다음 Aurora MySQL 2.09 이상을 선택합니다.

이전 병렬 쿼리 클러스터를 Aurora MySQL 2.09 이상으로 업그레이드한 후 업그레이드된 클러스터에서 병렬 쿼리를 설정합니다. 이러한 버전에서는 병렬 쿼리가 기본적으로 해제되어 있으며 이를 활성화하는 절차가 다릅니다. 해시 조인 최적화도 기본적으로 해제되어 있으므로 별도로 설정해야 합니다. 따라서 업그레이드 후 이러한 설정을 다시 설정하도록 합니다. 관련 지침은 Aurora MySQL에서 병렬 쿼리 설정 및 해제병렬 쿼리 클러스터에 대한 해시 조인 설정 단원을 참조하세요.

특히 aurora_parallel_query=ONaurora_disable_hash_join=OFF 대신 aurora_pq_supportedaurora_pq 구성 파라미터를 사용하여 병렬 쿼리를 설정합니다. aurora_pq_supportedaurora_pq 파라미터는 최신 Aurora MySQL 버전에서는 더 이상 사용되지 않습니다.

업그레이드된 클러스터에서 EngineMode 속성은 provisioned 대신 parallelquery 값을 갖습니다. 지정된 엔진 버전에 대해 병렬 쿼리를 사용할 수 있는지 여부를 확인하려면 이제 SupportsParallelQuery describe-db-engine-versions 명령의 출력에서 AWS CLI 필드 값을 확인합니다. 이전 Aurora MySQL 버전에서는 parallelquery 목록에 SupportedEngineModes가 있는지 확인했습니다.

Aurora MySQL 버전 2.09 이상으로 업그레이드한 후 다음 기능을 이용할 수 있습니다. 이러한 기능은 이전 Aurora MySQL 버전을 실행하는 병렬 쿼리 클러스터에는 사용할 수 없습니다.

병렬 쿼리를 위한 성능 튜닝

병렬 쿼리로 워크로드의 성능을 관리하려면, 이 최적화가 가장 도움이 되는 쿼리에 병렬 쿼리가 사용되어야 합니다.

그렇게 하기 위해 다음을 수행할 수 있습니다.

병렬 쿼리를 활용하기 위해 스키마 객체 생성

병렬 쿼리에 사용할 테이블을 생성하거나 수정하기 전에 사전 조건제한 사항에 설명된 요구 사항을 숙지해야 합니다.

병렬 쿼리는 테이블이 ROW_FORMAT=Compact 또는 ROW_FORMAT=Dynamic 설정을 사용해야 하기 때문에 Aurora 구성 설정에 INNODB_FILE_FORMAT 구성 옵션에 대한 변경 사항이 있는지 확인합니다. SHOW TABLE STATUS 문을 실행하여 데이터베이스의 모든 테이블에 대한 행 형식을 확인합니다.

스키마를 변경하여 병렬 쿼리가 더 많은 테이블에서 작동하도록 설정하기 전에 테스트해야 합니다. 테스트에서 병렬 쿼리로 인해 해당 테이블의 성능이 실제로 향상되는지 확인해야 합니다. 또한, 병렬 쿼리를 위한 스키마 요구 사항이 원하는 목표와 다른 식으로 양립될 수 있는지 확인합니다.

예를 들어, ROW_FORMAT=Compressed에서 ROW_FORMAT=Compact 또는 ROW_FORMAT=Dynamic으로 전환하기 전에 원본 테이블과 새 테이블에 대한 워크로드의 성능을 테스트합니다. 또한 데이터 볼륨 증가와 같은 다른 잠재적 영향도 고려합니다.