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=ON
및 aurora_disable_hash_join=OFF
대신 aurora_pq_supported
및 aurora_pq
구성 파라미터를 사용하여 병렬 쿼리를 설정합니다. aurora_pq_supported
및 aurora_pq
파라미터는 최신 Aurora MySQL 버전에서는 더 이상 사용되지 않습니다.
업그레이드된 클러스터에서 EngineMode
속성은 provisioned
대신 parallelquery
값을 갖습니다. 지정된 엔진 버전에 대해 병렬 쿼리를 사용할 수 있는지 여부를 확인하려면 이제 SupportsParallelQuery
describe-db-engine-versions
명령의 출력에서 AWS CLI 필드 값을 확인합니다. 이전 Aurora MySQL 버전에서는 parallelquery
목록에 SupportedEngineModes
가 있는지 확인했습니다.
Aurora MySQL 버전 2.09 이상으로 업그레이드한 후 다음 기능을 이용할 수 있습니다. 이러한 기능은 이전 Aurora MySQL 버전을 실행하는 병렬 쿼리 클러스터에는 사용할 수 없습니다.
-
Performance Insights. 자세한 내용은 성능 개선 도우미를 통한 Amazon Aurora 모니터링 섹션을 참조하세요.
-
역추적. 자세한 내용은 Aurora DB 클러스터 역추적 섹션을 참조하세요.
-
클러스터 중지 및 시작. 자세한 내용은 Amazon Aurora DB 클러스터 중지 및 시작 섹션을 참조하세요.
병렬 쿼리를 위한 성능 튜닝
병렬 쿼리로 워크로드의 성능을 관리하려면, 이 최적화가 가장 도움이 되는 쿼리에 병렬 쿼리가 사용되어야 합니다.
그렇게 하기 위해 다음을 수행할 수 있습니다.
-
최대 규모의 테이블이 병렬 쿼리와 호환되는지 확인합니다. 이러한 테이블에 대한 쿼리에 병렬 쿼리 최적화가 활용될 수 있도록 테이블 속성을 변경하거나 일부 테이블을 다시 생성할 수 있습니다. 자세한 방법은 병렬 쿼리를 활용하기 위해 스키마 객체 생성 단원을 참조하십시오.
-
어떤 쿼리가 병렬 쿼리를 사용하는지 모니터링합니다. 자세한 방법은 Aurora MySQL용 병렬 쿼리 모니터링 단원을 참조하십시오.
-
병렬 쿼리가 데이터 집약적인 장기 실행 쿼리에서 사용되는지 그리고 적절한 수준의 워크로드 동시성에서 사용되는지 확인합니다. 자세한 방법은 어떤 문이 Aurora MySQL의 병렬 쿼리를 사용하는지 확인 단원을 참조하십시오.
-
SQL 코드를 세부 조정하여 예상한 쿼리에 병렬 쿼리가 적용되도록 설정합니다. 자세한 방법은 Aurora MySQL의 병렬 쿼리를 위한 SQL 구성 단원을 참조하십시오.
병렬 쿼리를 활용하기 위해 스키마 객체 생성
병렬 쿼리에 사용할 테이블을 생성하거나 수정하기 전에 사전 조건 및 제한 사항에 설명된 요구 사항을 숙지해야 합니다.
병렬 쿼리는 테이블이 ROW_FORMAT=Compact
또는 ROW_FORMAT=Dynamic
설정을 사용해야 하기 때문에 Aurora 구성 설정에 INNODB_FILE_FORMAT
구성 옵션에 대한 변경 사항이 있는지 확인합니다. SHOW TABLE STATUS
문을 실행하여 데이터베이스의 모든 테이블에 대한 행 형식을 확인합니다.
스키마를 변경하여 병렬 쿼리가 더 많은 테이블에서 작동하도록 설정하기 전에 테스트해야 합니다. 테스트에서 병렬 쿼리로 인해 해당 테이블의 성능이 실제로 향상되는지 확인해야 합니다. 또한, 병렬 쿼리를 위한 스키마 요구 사항이 원하는 목표와 다른 식으로 양립될 수 있는지 확인합니다.
예를 들어, ROW_FORMAT=Compressed
에서 ROW_FORMAT=Compact
또는 ROW_FORMAT=Dynamic
으로 전환하기 전에 원본 테이블과 새 테이블에 대한 워크로드의 성능을 테스트합니다. 또한 데이터 볼륨 증가와 같은 다른 잠재적 영향도 고려합니다.