Aurora MySQL용 병렬 쿼리 모니터링 - Amazon Aurora

Aurora MySQL용 병렬 쿼리 모니터링

Aurora MySQL 클러스터가 병렬 쿼리를 사용하는 경우 VolumeReadIOPS 값이 증가할 수 있습니다. 병렬 쿼리는 버퍼 풀을 사용하지 않습니다. 따라서 쿼리는 빠르지만 이렇게 최적화된 프로세싱은 읽기 작업 및 관련 비용을 증가시킬 수 있습니다.

Amazon RDS 콘솔에서 지표 보기에 설명된 Amazon CloudWatch 지표 외에도 Aurora는 다른 전역적 상태 변수를 제공합니다. 이러한 전역 상태 변수를 사용하여 병렬 쿼리 실행을 모니터링할 수 있습니다. 이를 통해 최적화 프로그램이 주어진 상황에서 병렬 쿼리를 사용하거나 사용하지 않는 이유를 파악할 수 있습니다. 이러한 변수에 액세스하기 위해 SHOW GLOBAL STATUS 명령을 사용할 수 있습니다. 또한 아래에 나열된 변수도 찾을 수 있습니다.

병렬 쿼리 세션은 데이터베이스에서 수행한 쿼리와 반드시 일대일 매핑되는 것은 아닙니다. 예를 들어, 쿼리 계획에 병렬 쿼리를 사용하는 두 단계가 있다고 가정해 봅시다. 이 경우에, 쿼리는 두 병렬 세션 및 시도된 요청을 위한 카운터가 필요하고 성공한 요청은 2씩 증가합니다.

EXPLAIN 문을 실행하여 병렬 쿼리로 시험할 때, 쿼리가 실제로 실행 중이지 않은 경우에도 "선택되지 않음"으로 지정된 카운터에서 증가가 있을 것으로 예상합니다. 프로덕션에서 병렬 쿼리로 작업할 때 "선택되지 않은" 카운터가 예상보다 더 빠르게 증가하고 있는지 확인할 수 있습니다. 이때 예상한 쿼리에 대해 병렬 쿼리가 실행되도록 조정할 수 있습니다. 이렇게 하려면 클러스터 설정, 쿼리 조합, 병렬 쿼리가 설정된 DB 인스턴스 등을 변경할 수 있습니다.

이러한 카운터는 DB 인스턴스 수준에서 추적됩니다. 서로 다른 엔드포인트에 연결된 경우, 각 DB 인스턴스가 자체의 고유한 병렬 쿼리 집합을 실행하기 때문에 서로 다른 지표가 표시될 수도 있습니다. 또한 리더 엔드포인트가 각 세션마다 서로 다른 DB 인스턴스에 연결된 경우에도 서로 다른 지표가 표시될 수 있습니다.

이름 설명

Aurora_pq_bytes_returned

병렬 쿼리 동안 헤드 노드에 전송된 튜플 데이터 구조를 위한 바이트 수입니다. Aurora_pq_pages_pushed_down과 비교하기 위해 16,384로 나눕니다.

Aurora_pq_max_concurrent_requests

이 Aurora DB 인스턴스에서 동시에 실행될 수 있는 병렬 쿼리 세션의 최대 수입니다. 이 수는 AWS DB 인스턴스 클래스에 따라 결정되는 고정된 수입니다.

Aurora_pq_pages_pushed_down

병렬 쿼리가 헤드 노드로 네트워크 전송을 회피한 데이터 페이지의 수입니다(각각 16 KiB의 고정 크기).

Aurora_pq_request_attempted

요청된 병렬 쿼리 세션의 수입니다. 이 값은 하위 쿼리 및 조인과 같은 SQL 구조에 따라, 쿼리 당 두 개 이상의 세션을 나타낼 수 있습니다.

Aurora_pq_request_executed

병렬 쿼리 세션의 수가 성공적으로 실행됩니다.

Aurora_pq_request_failed

클라이언트에 오류를 반환한 병렬 쿼리 세션의 수입니다. 일부 경우에 병렬 쿼리를 위한 요청이 실패할 수도 있습니다(예를 들어, 스토리지 계층의 문제로 인해). 이러한 경우에는 실패한 쿼리 부분이 비병렬 쿼리 메커니즘을 사용하여 다시 시도됩니다. 다시 시도된 쿼리 또한 실패하는 경우, 오류가 클라이언트에 반환되고 이 카운터가 증가합니다.

Aurora_pq_request_in_progress

병렬 쿼리 세션의 수가 현재 진행 중입니다. 이 수는 전체 Aurora DB 클러스터가 아니라 연결되어 있는 특정 Aurora DB 인스턴스에 적용됩니다. DB 인스턴스가 동시성 한도에 근접했는지 확인하려면, 이 값을 Aurora_pq_max_concurrent_requests와 비교합니다.

Aurora_pq_request_not_chosen

병렬 쿼리가 쿼리를 충족시키기 위해 선택되지 않은 횟수입니다. 이 값은 여러 개의 다른 더 세분화된 카운터의 합계입니다. 쿼리가 실제로 수행되지 않더라도 EXPLAIN 문을 통해 이 카운터가 증가할 수 있습니다.

Aurora_pq_request_not_chosen_below_min_rows

테이블에 있는 행의 수로 인해 병렬 쿼리가 선택되지 않은 횟수입니다. 쿼리가 실제로 수행되지 않더라도 EXPLAIN 문을 통해 이 카운터가 증가할 수 있습니다.

Aurora_pq_request_not_chosen_column_bit

예상 열 목록에서 지원되지 않는 데이터 형식으로 인해 비병렬 쿼리 처리 경로를 사용하는 병렬 쿼리 요청의 수입니다.

Aurora_pq_request_not_chosen_column_geometry

테이블에 GEOMETRY 데이터 형식의 열이 있기 때문에 비병렬 쿼리 처리 경로를 사용하는 병렬 쿼리 요청의 수입니다. 이 제한 사항이 적용되지 않는 Aurora MySQL 버전에 대한 자세한 정보는 Aurora MySQL 버전 3에 병렬 쿼리 클러스터 업그레이드 섹션을 참조하세요.

Aurora_pq_request_not_chosen_column_lob

테이블에 LOB 데이터 형식의 열이 있거나 VARCHAR 선언된 길이로 인해 외부에 저장된 열이 있으므로에 비병렬 쿼리 처리 경로를 사용하는 병렬 쿼리 요청의 수입니다. 이 제한 사항이 제거된 Aurora MySQL 버전에 대한 자세한 정보는 Aurora MySQL 버전 3에 병렬 쿼리 클러스터 업그레이드 섹션을 참조하세요.

Aurora_pq_request_not_chosen_column_virtual

테이블에 가상 열이 포함되어 있기 때문에 비병렬 쿼리 처리 경로를 사용하는 병렬 쿼리 요청의 수입니다.

Aurora_pq_request_not_chosen_custom_charset

테이블에 사용자 지정 문자 집합이 있는 열이 있기 때문에 비병렬 쿼리 처리 경로를 사용하는 병렬 쿼리 요청의 수입니다.

Aurora_pq_request_not_chosen_fast_ddl

테이블이 현재 빠른 DDL ALTER 문에 의해 변경되고 있기 때문에 비병렬 쿼리 처리 경로를 사용하는 병렬 쿼리 요청의 수입니다.

Aurora_pq_request_not_chosen_few_pages_outside_buffer_pool

테이블 데이터 중 95% 미만이 버퍼 풀에 있는 경우에도, 버퍼링되지 않은 테이블 데이터가 병렬 쿼리가 가치 있을 만큼 충분하지 않았기 때문에 병렬 쿼리가 선택되지 않은 횟수입니다.

Aurora_pq_request_not_chosen_full_text_index

테이블에 전체 텍스트 인덱스가 있기 때문에 비병렬 쿼리 처리 경로를 사용하는 병렬 쿼리 요청의 수입니다.

Aurora_pq_request_not_chosen_high_buffer_pool_pct

테이블 데이터 중 많은 양이(현재, 95% 이상) 이미 버퍼 풀에 있었기 때문에 병렬 쿼리가 선택되지 않은 횟수입니다. 이러한 경우, 옵티마이저는 버퍼 풀에서 데이터 읽기가 더 효율적이라고 결정합니다. 쿼리가 실제로 수행되지 않더라도 EXPLAIN 문을 통해 이 카운터가 증가할 수 있습니다.

Aurora_pq_request_not_chosen_index_hint

쿼리에 인덱스 힌트가 포함되어 있기 때문에 비병렬 쿼리 처리 경로를 사용하는 병렬 쿼리 요청의 수입니다.

Aurora_pq_request_not_chosen_innodb_table_format

테이블이 지원되지 않는 InnoDB 행 형식을 사용하기 때문에 비병렬 쿼리 처리 경로를 사용하는 병렬 쿼리 요청의 수입니다. Aurora 병렬 쿼리는 COMPACT, REDUNDANTDYNAMIC 행 형식에만 적용됩니다.

Aurora_pq_request_not_chosen_long_trx

장기 실행 트랜잭션 내부에서 쿼리가 시작되는 중이어서 비병렬 쿼리 처리 경로를 사용한 병렬 쿼리 요청의 수입니다. 쿼리가 실제로 수행되지 않더라도 EXPLAIN 문을 통해 이 카운터가 증가할 수 있습니다.

Aurora_pq_request_not_chosen_no_where_clause

쿼리에 WHERE 절이 포함되어 있지 않기 때문에 비병렬 쿼리 처리 경로를 사용하는 병렬 쿼리 요청의 수입니다.

Aurora_pq_request_not_chosen_range_scan

쿼리가 인덱스에서 범위 스캔을 사용하기 때문에 비병렬 쿼리 처리 경로를 사용하는 병렬 쿼리 요청의 수입니다.

Aurora_pq_request_not_chosen_row_length_too_long

모든 열의 총 결합 길이가 너무 길기 때문에 비병렬 쿼리 처리 경로를 사용하는 병렬 쿼리 요청의 수입니다.

Aurora_pq_request_not_chosen_small_table

행의 수 및 평균 행 길이에 따라 결정된 테이블의 전체 크기로 인해 병렬 쿼리가 선택되지 않은 횟수입니다. 쿼리가 실제로 수행되지 않더라도 EXPLAIN 문을 통해 이 카운터가 증가할 수 있습니다.

Aurora_pq_request_not_chosen_temporary_table

쿼리가 지원되지 않는 MyISAM 또는 memory 테이블 형식을 사용하는 임시 테이블을 참조하기 때문에 비병렬 쿼리 처리 경로를 사용하는 병렬 쿼리 요청의 수입니다.

Aurora_pq_request_not_chosen_tx_isolation

쿼리가 지원되지 않는 트랜잭션 격리 수준을 사용하기 때문에 비병렬 쿼리 처리 경로를 사용하는 병렬 쿼리 요청의 수입니다. 읽기 전용 DB 인스턴스에서는 병렬 쿼리가 REPEATABLE READREAD COMMITTED 격리 수준에만 적용됩니다.

Aurora_pq_request_not_chosen_update_delete_stmts

쿼리가 UPDATE 또는 DELETE 문의 일부이기 때문에 비병렬 쿼리 처리 경로를 사용하는 병렬 쿼리 요청의 수입니다.

Aurora_pq_request_not_chosen_unsupported_access

WHERE 절이 병렬 쿼리를 위한 기준에 부합되지 않기 때문에 비병렬 쿼리 처리 경로를 사용하는 병렬 쿼리 요청의 수입니다. 이 결과는 쿼리에 데이터 집약적인 스캔이 필요하지 않은 경우이거나 쿼리가 DELETE 또는 UPDATE 문인 경우에 발생할 수 있습니다.

Aurora_pq_request_not_chosen_unsupported_storage_type

Aurora MySQL DB 클러스터가 지원되는 Aurora 클러스터 스토리지 구성을 사용하지 않기 때문에 비병렬 쿼리 처리 경로를 사용하는 병렬 쿼리 요청 수입니다. 이 파라미터는 Aurora MySQL 버전 3.04 이상에서 사용할 수 있습니다. 자세한 내용은 제한 사항 단원을 참조하십시오.

Aurora_pq_request_throttled

동시 병렬 쿼리의 최대 수가 이미 특정 Aurora DB 인스턴스에서 실행 중이기 때문에 병렬 쿼리가 선택되지 않은 횟수입니다.