이 페이지에서는 쿼리 계획 시각화 도구의 주요 구성요소를 설명합니다.
Google Cloud 콘솔의 쿼리 계획 시각화 도구를 사용하면 Spanner가 쿼리를 평가하기 위해 선택하는 실행 계획의 구조를 이해할 수 있습니다.
시각화 도구는 계획을 시각적 그래프로 표시하므로 Spanner가 쿼리를 실행하는 방법을 더 쉽게 분석하고 잠재적인 성능 병목 현상을 식별할 수 있습니다. 쿼리 계획 시각화 도구를 사용하여 다음 중 하나를 수행할 수 있습니다.
- 느린 쿼리 디버깅: 쿼리 계획에서 가장 많은 시간이나 리소스를 사용하는 부분을 정확히 파악합니다.
- 최적화 검증: 변경 전후의 쿼리 계획을 비교하여 (예: 색인 추가 또는 조인 재작성) 개선사항을 확인합니다.
- 쿼리 동작 이해: Spanner가 조인, 집계, 분산 작업을 포함한 복잡한 SQL 문을 처리하는 방법을 알아봅니다.
쿼리 계획 시각화 도구 사용의 이점
쿼리 계획은 복잡할 수 있습니다. 시각화 도구는 다음 기능을 제공하여 계획 분석을 간소화합니다.
- 그래픽 표현: 다양한 연산자를 통해 테이블 및 색인에서 최종 결과로 이어지는 데이터 흐름을 표시합니다.
- 성능 통계: 높은 지연 시간과 CPU 사용량에 대한 시각적 단서가 있는 비용이 많이 드는 연산자를 식별합니다.
- 행 수 시각화: 선 두께 표시기로 각 단계의 데이터 볼륨을 표시합니다.
- 상세 통계: 각 연산자의 특정 런타임 통계를 제공합니다.
쿼리 계획 시각화 도구 액세스
다음 방법 중 하나를 통해 Google Cloud 콘솔에서 쿼리 계획 시각화 도구에 액세스할 수 있습니다.
- Spanner Studio: 쿼리를 작성하고 테스트하는 동안 실시간 주문형 쿼리 계획을 생성합니다.
- 쿼리 통계: 시간 경과에 따라 프로덕션 워크로드에서 캡처된 샘플링된 이전 쿼리 계획을 확인합니다.
Spanner Studio에서 주문형 계획 보기
Spanner Studio에서 쿼리의 주문형 쿼리 계획을 보려면 다음 안내를 따르세요.
Google Cloud 콘솔에서 Spanner 인스턴스 페이지로 이동합니다.
쿼리할 데이터베이스가 포함된 인스턴스의 이름을 클릭합니다.
데이터베이스 목록에서 데이터베이스 이름을 클릭합니다.
탐색 메뉴에서 Spanner 스튜디오를 클릭합니다.
편집기 창에 SQL 쿼리를 입력합니다.
실행을 클릭합니다.
설명 탭을 클릭합니다.
쿼리 통계에서 샘플링된 계획 보기
쿼리 통계에서 샘플링된 이전 쿼리 계획을 보려면 다음 안내를 따르세요.
Google Cloud 콘솔에서 Spanner 인스턴스 페이지로 이동합니다.
조사할 데이터베이스가 포함된 인스턴스의 이름을 클릭합니다.
탐색 메뉴에서 쿼리 통계를 클릭합니다.
분석할 데이터베이스와 기간을 선택합니다.
상위 N개 쿼리 표에서 검사할 쿼리 또는 요청 태그를 클릭합니다.
쿼리 계획 샘플 그래프에서 쿼리 실행을 나타내는 샘플 점을 클릭합니다.
쿼리 계획 시각화 도구 섹션에서 시각적 실행 계획을 확인합니다.
시각화 도구 탐색
시각화 도구는 쿼리 계획을 방향성 비순환 그래프 (DAG)로 표시합니다.

실행한 쿼리에 따라 쿼리 계획 시각화가 커질 수 있습니다. 세부정보를 숨기거나 표시하려면 확장된 뷰/간단한 뷰 선택기를 클릭합니다. 확대 또는 축소하려면 확대/축소 컨트롤을 사용합니다.
시각화 도구 인터페이스는 다음 정보 패널을 제공합니다.
시각화된 쿼리 계획을 다운로드하려면 JSON 다운로드를 클릭합니다. 나중에 쿼리 계획을 보려면 다운로드한 JSON 프로필을 Spanner Studio로 다시 가져오면 됩니다. 성능 문제를 해결해야 하는 경우 JSON 파일을 Spanner 지원팀과 공유합니다.
쿼리 계획 비순환 그래프
Spanner가 쿼리를 실행하는 데 사용하는 로직이 DAG로 표시됩니다. 그래프는 아래에서 위로 데이터 흐름을 표시합니다. 테이블과 색인은 하단에 표시되고 최종 쿼리 출력은 상단에 표시됩니다.
그래프의 각 노드는 카드로 표시됩니다. 각 카드는 입력에서 행을 사용하고 상위 행을 생성하는 반복자를 나타냅니다.
카드를 연결하는 선은 반복자 간의 행 흐름을 나타냅니다. 선 두께는 전달된 상대적인 행 수를 나타냅니다. 선이 두꺼울수록 행이 많음을 나타냅니다.
그래프의 각 카드에는 다음 정보가 포함됩니다.
- 반복자 이름: 반복자의 이름입니다.
- 런타임 통계: 반환된 행 수, 지연 시간, CPU 사용량입니다.
카드를 클릭하여 지연 시간, CPU 사용량, 반환된 행, 실행 횟수, 머신 그룹 수에 대한 자세한 정보를 확인합니다.
연산자에 대한 자세한 내용은 쿼리 실행 연산자를 참조하세요.
Spanner 쿼리는 여러 데이터베이스 분할에서 데이터를 검색하는 경우가 많습니다. 머신 그룹은 분할 집합에 대해 함께 실행되는 연속적인 쿼리 실행 연산자 집합을 나타냅니다. 단일 머신 그룹 내에서 연산자는 아래에서 위로 순차적으로 실행되는 반면, 서로 다른 머신 그룹은 동시에 실행됩니다. 데이터가 머신 그룹 경계를 넘어 분할 간에 이동할 때는 리모트 프러시저 콜 (RPC)을 통해 이동합니다.
분할에 대한 자세한 내용은 데이터베이스 분할을 참조하세요.
시각화 도구를 사용하면 논리적 배포와 물리적 배포를 구분할 수 있습니다.
- 논리적 경계: 분산 라벨이 지정된 카드는 쿼리 플래너가 쿼리 로직을 분할한 위치를 나타냅니다.
- 물리적 분포: 그래프의 머신 그룹 색상은 런타임 통계에서 파생된 실제 물리적 실행을 나타냅니다.
물리적 경계는 논리적 분산 연산자와 일치하는 경우가 많지만 서버 간에 분할이 배치되는 방식에 따라 달라질 수 있습니다.
쿼리 요약
쿼리 요약 창은 다음과 같은 대략적인 실행 측정항목을 제공하고 쿼리의 잠재적인 병목 현상을 강조 표시합니다.
- 총 경과 시간: 쿼리를 처음부터 끝까지 실행하는 데 걸린 총 시간입니다.
- CPU 시간: 쿼리를 처리하는 모든 스레드 및 서버에서 소비된 누적 CPU 시간입니다.
- 계획 생성 시간: 쿼리 컴파일러 및 최적화 도구가 실행 계획을 생성하는 데 소요된 시간입니다.
- 서버 큐 지연: 처리가 시작되기 전에 쿼리가 서버 큐에서 대기하는 시간입니다.
- 반환된 행: 최종 쿼리 결과에서 반환된 총 행 수입니다.
- 스캔한 행: 스캔한 모든 테이블과 색인에서 스토리지에서 읽은 총 행 수입니다.
- 원격 호출: 분할 또는 머신 그룹 간에 수행된 총 RPC 수입니다.
- 쿼리 최적화 도구 버전: 계획을 컴파일하는 데 사용되는 Spanner 쿼리 최적화 도구의 버전입니다.
- 통계 패키지: 비용 기반 최적화에 사용되는 최적화 도구 통계 패키지입니다.
중요한 연산자
주요 연산자 섹션에서는 쿼리 계획에서 가장 리소스 집약적인 반복자를 강조 표시합니다.
- 가장 긴 지연 시간: 실행 시간이 가장 긴 연산자입니다.
- 가장 긴 CPU 시간: CPU 시간을 가장 많이 소비한 연산자입니다.
- 가장 큰 행 수: 가장 많은 행을 처리하거나 반환한 연산자입니다.
쿼리 실행 타임라인
쿼리 실행 타임라인 탭에는 각 머신 그룹이 쿼리의 일부를 얼마나 오래 실행하는지를 나타내는 시간 기반 그래프가 표시됩니다. 머신 그룹은 전체 쿼리 기간 동안 실행되지 않거나 여러 번 실행될 수 있습니다. 하지만 타임라인에는 초기 실행의 시작 시간과 최종 실행의 종료 시간만 표시됩니다.
실적을 위한 시각적 신호
시각화 도구는 다음 색상과 아이콘을 사용하여 문제를 파악하는 데 도움을 줍니다.
- 빨간색 막대: 전체 쿼리와 비교하여 해당 연산자가 소비한 지연 시간 또는 CPU 시간의 비율을 나타냅니다.
- 경고 삼각형: 전체 테이블 스캔이 발생했음을 나타냅니다. 이러한 스캔은 보조 색인을 추가하는 등의 방법으로 쿼리를 최적화할 수 있는 기회를 제공하는 경우가 많습니다.
- 머신 그룹 색상: 머신 그룹을 구분하고 그룹 간 전환을 강조 표시합니다. 이러한 전환에는 여러 머신에서 원격 실행이 필요하므로 직렬화 및 네트워크 오버헤드가 발생합니다. 쿼리 실행 타임라인에도 이러한 머신 그룹 색상이 표시됩니다.
다음 단계
- 쿼리 계획 시각화 도구를 사용하여 쿼리를 미세 조정하는 방법 알아보기
- 특정 쿼리 실행 연산자에 대해 알아보기
- 쿼리 실행 계획을 자세히 이해합니다.