

# Aurora MySQL에서 병렬 쿼리 최적화
<a name="aurora-mysql-parallel-query-optimizing"></a>

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

**Contents**
+ [병렬 쿼리 클러스터 계획](#aurora-mysql-parallel-query-planning)
  + [병렬 쿼리를 위한 Aurora MySQL 버전 호환성 확인](#aurora-mysql-parallel-query-checking-compatibility)
+ [병렬 쿼리를 위한 업그레이드 고려 사항](#aurora-mysql-parallel-query-upgrade)
  + [Aurora MySQL 버전 3에 병렬 쿼리 클러스터 업그레이드](#aurora-mysql-parallel-query-upgrade-pqv2)
  + [Aurora MySQL 2.09 이상으로 업그레이드](#aurora-mysql-parallel-query-upgrade-2.09)
+ [병렬 쿼리를 위한 성능 튜닝](#aurora-mysql-parallel-query-performance)
+ [병렬 쿼리를 활용하기 위해 스키마 객체 생성](#aurora-mysql-parallel-query-tables)

## 병렬 쿼리 클러스터 계획
<a name="aurora-mysql-parallel-query-planning"></a>

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

계획 과정에서 다음과 같은 사항을 고려해야 합니다.
+ MySQL 5.7과 호환되는 Aurora MySQL을 사용하는 경우 프로비저닝된 클러스터를 생성해야 합니다. 그런 다음 `aurora_parallel_query` 파라미터를 사용하여 병렬 쿼리를 설정합니다.

  기존 Aurora MySQL 클러스터가 있는 경우 병렬 쿼리를 사용하기 위해 새 클러스터를 생성할 필요가 없습니다. 클러스터 또는 클러스터의 특정 DB 인스턴스를 `aurora_parallel_query` 파라미터가 설정된 파라미터 그룹에 연결할 수 있습니다. 이렇게 하면 병렬 쿼리와 함께 사용할 관련 데이터를 설정하는 데 드는 시간과 노력을 줄일 수 있습니다.
+ 테이블에 액세스할 때 병렬 쿼리를 사용할 수 있도록 재구성해야 하는 대형 테이블이 있는지 확인하고 조치를 취합니다. 병렬 쿼리가 유용한 일부 대형 테이블의 경우 새 버전을 만들어야 할 수도 있습니다. 예를 들어 전체 텍스트 검색 인덱스를 제거해야 할 수 있습니다. 세부 정보는 [병렬 쿼리를 활용하기 위해 스키마 객체 생성](#aurora-mysql-parallel-query-tables)을 참조하세요.

### 병렬 쿼리를 위한 Aurora MySQL 버전 호환성 확인
<a name="aurora-mysql-parallel-query-checking-compatibility"></a>

병렬 쿼리 클러스터와 호환되는 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
5.7.mysql_aurora.2.11.2
5.7.mysql_aurora.2.11.3
5.7.mysql_aurora.2.11.4
5.7.mysql_aurora.2.11.5
5.7.mysql_aurora.2.11.6
5.7.mysql_aurora.2.12.0
5.7.mysql_aurora.2.12.1
5.7.mysql_aurora.2.12.2
5.7.mysql_aurora.2.12.3
5.7.mysql_aurora.2.12.4
8.0.mysql_aurora.3.04.0
8.0.mysql_aurora.3.04.1
8.0.mysql_aurora.3.04.2
8.0.mysql_aurora.3.04.3
8.0.mysql_aurora.3.05.2
8.0.mysql_aurora.3.06.0
8.0.mysql_aurora.3.06.1
8.0.mysql_aurora.3.07.0
8.0.mysql_aurora.3.07.1
```

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

## 병렬 쿼리를 위한 업그레이드 고려 사항
<a name="aurora-mysql-parallel-query-upgrade"></a>

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

### Aurora MySQL 버전 3에 병렬 쿼리 클러스터 업그레이드
<a name="aurora-mysql-parallel-query-upgrade-pqv2"></a>

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

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

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

### Aurora MySQL 2.09 이상으로 업그레이드
<a name="aurora-mysql-parallel-query-upgrade-2.09"></a>

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

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

특히 `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 모니터링](USER_PerfInsights.md) 섹션을 참조하세요.
+ 역추적. 자세한 내용은 [Aurora DB 클러스터 역추적](AuroraMySQL.Managing.Backtrack.md) 섹션을 참조하세요.
+ 클러스터 중지 및 시작. 자세한 내용은 [Amazon Aurora DB 클러스터 중지 및 시작](aurora-cluster-stop-start.md) 섹션을 참조하세요.

## 병렬 쿼리를 위한 성능 튜닝
<a name="aurora-mysql-parallel-query-performance"></a>

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

 그렇게 하기 위해 다음을 수행할 수 있습니다.
+  최대 규모의 테이블이 병렬 쿼리와 호환되는지 확인합니다. 이러한 테이블에 대한 쿼리에 병렬 쿼리 최적화가 활용될 수 있도록 테이블 속성을 변경하거나 일부 테이블을 다시 생성할 수 있습니다. 자세한 방법은 [병렬 쿼리를 활용하기 위해 스키마 객체 생성](#aurora-mysql-parallel-query-tables) 단원을 참조하십시오.
+  어떤 쿼리가 병렬 쿼리를 사용하는지 모니터링합니다. 자세한 방법은 [Aurora MySQL용 병렬 쿼리 모니터링](aurora-mysql-parallel-query-monitoring.md) 단원을 참조하십시오.
+  병렬 쿼리가 데이터 집약적인 장기 실행 쿼리에서 사용되는지 그리고 적절한 수준의 워크로드 동시성에서 사용되는지 확인합니다. 자세한 방법은 [어떤 문이 Aurora MySQL의 병렬 쿼리를 사용하는지 확인](aurora-mysql-parallel-query-verifying.md) 단원을 참조하십시오.
+  SQL 코드를 세부 조정하여 예상한 쿼리에 병렬 쿼리가 적용되도록 설정합니다. 자세한 방법은 [Aurora MySQL의 병렬 쿼리를 위한 SQL 구성](aurora-mysql-parallel-query-sql.md) 단원을 참조하십시오.

## 병렬 쿼리를 활용하기 위해 스키마 객체 생성
<a name="aurora-mysql-parallel-query-tables"></a>

 병렬 쿼리에 사용할 테이블을 생성하거나 수정하기 전에 [사전 조건](aurora-mysql-parallel-query.md#aurora-mysql-parallel-query-prereqs) 및 [제한 사항](aurora-mysql-parallel-query.md#aurora-mysql-parallel-query-limitations)에 설명된 요구 사항을 숙지해야 합니다.

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

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

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