쿼리 성능 최적화 소개

쿼리가 원하는 것보다 느리게 실행되는 경우가 있습니다. 일반적으로 작업량이 적은 쿼리의 성능이 더 우수합니다. 이러한 쿼리는 리소스를 더 적게 소비하므로 비용이 절감되고 실패도 줄어듭니다. 이 문서에서는 BigQuery에서 쿼리 성능을 향상시킬 수 있는 최적화 기법을 간략하게 설명합니다.

쿼리 성능

BigQuery에서의 쿼리 성능 평가에는 다음과 같은 몇 가지 요소가 포함됩니다.

특정 쿼리에 문제가 있는지 또는 리소스 경합이 발생하는지 평가하려면 Cloud Monitoring 또는 BigQuery 관리 리소스 차트를 사용하여 BigQuery 작업이 시간별로 리소스를 얼마나 소모하는지 모니터링하면 됩니다. 느리거나 리소스를 많이 사용하는 쿼리를 발견했다면 해당 쿼리의 성능 최적화에 집중할 수 있습니다.

일부 쿼리 패턴, 특히 비즈니스 인텔리전스 도구로 생성된 패턴은 BigQuery BI Engine을 사용하여 가속화할 수 있습니다. BI Engine은 가장 자주 사용하는 데이터를 지능적으로 캐시하여 BigQuery의 여러 SQL 쿼리를 가속화하는 빠른 메모리 내 분석 서비스입니다. BI Engine은 BigQuery에 기본 제공되므로 쿼리를 수정하지 않고도 성능을 개선할 수 있습니다.

모든 시스템과 마찬가지로 성능을 최적화하는 경우 종종 반대급부가 발생합니다. 예를 들어 고급 SQL 구문을 사용하면 복잡성이 증가하고 SQL 전문가가 아닌 사용자의 쿼리 이해도가 저하될 수 있습니다. 중요도가 낮은 작업에 대한 마이크로 최적화에 시간을 투자하면 애플리케이션의 새로운 기능을 구축하거나 더 영향력이 큰 최적화 작업을 수행하는 데 필요한 리소스가 전용될 수도 있습니다. 따라서 가장 큰 투자수익을 얻으려면 데이터 분석 파이프라인에 가장 중요한 워크로드 최적화에 집중하는 것이 좋습니다.

용량 및 동시 실행

BigQuery에서 쿼리에 적용하는 가격 책정 모델은 주문형 가격과 용량 기반 가격 2가지입니다. 주문형 모델은 공유 용량 풀을 제공하며 가격은 실행하는 각 쿼리에서 처리되는 데이터 양을 기준으로 책정됩니다.

용량 기반 모델은 일관된 월별 지출이 필요하거나 주문형 모델에서 제공되는 것보다 더 많은 용량이 필요한 경우에 권장됩니다. 용량 기반 가격 책정을 사용할 때는 슬롯으로 측정되는 전용 쿼리 처리 용량을 할당합니다. 모든 바이트 처리 비용이 용량 기반 가격에 포함됩니다. 고정된 슬롯 약정 외에도 쿼리 워크로드를 기준으로 동적 용량을 제공하는 자동 확장 슬롯을 사용할 수 있습니다.

SQL 쿼리 처리 중에 BigQuery는 쿼리의 각 단계를 실행하는 데 필요한 연산 용량을 슬롯으로 나눕니다. BigQuery는 다음과 같이 동시에 실행할 수 있는 쿼리 수를 자동으로 결정합니다.

  • 주문형 모델: 프로젝트에서 사용 가능한 슬롯 수
  • 용량 기반 모델: 예약에 사용 가능한 슬롯 수

사용 가능한 것보다 많은 슬롯이 필요한 쿼리는 처리 리소스를 사용할 수 있을 때까지 에 추가됩니다. 쿼리 실행이 시작된 후 BigQuery는 스테이지 크기 및 복잡성과 사용 가능한 슬롯 수를 기반으로 각 쿼리 스테이지에서 사용하는 슬롯 수를 계산합니다. BigQuery는 공정 예약이라는 기술을 사용하여 각 쿼리가 진행할 수 있도록 충분한 용량을 보장합니다.

슬롯 용량이 많다고 해서 항상 쿼리 성능이 더 빨라지는 것은 아닙니다. 그러나 슬롯 풀이 클수록 대용량 또는 복잡한 쿼리의 성능과 동시 워크로드의 성능이 향상될 수 있습니다. 쿼리 성능을 향상시키려면 슬롯 예약을 수정하거나 슬롯 자동 확장에 더 높은 제한을 설정하면 됩니다.

쿼리 계획 및 타임라인

BigQuery는 쿼리를 실행할 때마다 쿼리 계획을 생성합니다. 효과적인 쿼리 최적화를 위해서는 이 계획을 이해하는 것이 중요합니다. 쿼리 계획에는 읽은 바이트 및 사용된 슬롯 시간과 같은 실행 통계가 포함됩니다. 쿼리 계획에는 쿼리 성능을 진단하고 개선하는 데 도움이 되는 다양한 실행 단계에 대한 세부정보도 포함됩니다. 쿼리 실행 그래프는 쿼리 계획을 보고 쿼리 성능 문제를 진단하기 위한 그래픽 인터페이스를 제공합니다.

jobs.get API 메서드 또는 INFORMATION_SCHEMA.JOBS를 사용하여 쿼리 계획 및 타임라인 정보를 검색할 수도 있습니다. 이 정보는 BigQuery 작업의 실행 단계 흐름을 시각적으로 나타내는 오픈소스 도구인 BigQuery Visualiser에서 사용됩니다.

BigQuery는 쿼리 작업을 실행할 때 선언적 SQL 문을 실행 그래프로 변환합니다. 그리고 이 그래프를 일련의 쿼리 스테이지로 세분화합니다. 각 쿼리 스테이지에는 더 세분화된 실행 단계 조합이 있습니다. BigQuery는 크게 분산된 병렬 아키텍처를 사용하여 이러한 쿼리를 실행합니다. BigQuery 스테이지는 많은 잠재적 작업자들이 동시에 실행할 수 있는 작업 단위를 모델링합니다. 스테이지는 빠른 분산 셔플 아키텍처를 통해 서로 통신합니다.

쿼리 실행 계획

쿼리 작업에는 쿼리 계획 외에 실행 타임라인도 제공됩니다. 이 타임라인은 쿼리 작업자 사이에서 완료, 보류, 활성 상태의 작업 단위에 대한 설명을 제공합니다. 쿼리에는 활성 작업자를 포함한 여러 스테이지가 동시에 있을 수 있으므로 쿼리의 전반적인 진행 상황을 보여주기 위한 용도로 타임라인이 사용됩니다.

타임라인 통계

쿼리의 계산 비용을 추정하려면 쿼리에서 소요되는 총 슬롯 시간(초)을 살펴보면 됩니다. 슬롯 시간(초)은 짧을수록 좋습니다. 그래야 동일한 프로젝트에서 동시에 실행되는 다른 쿼리에서 더 많은 리소스를 사용할 수 있기 때문입니다.

쿼리 계획과 타임라인 통계는 BigQuery가 쿼리를 어떻게 실행하며, 어떤 스테이지에 리소스 사용이 집중되는지 이해하는 데 유용할 수 있습니다. 예를 들어 입력 행보다 훨씬 많은 출력 행을 생성하는 JOIN 스테이지는 쿼리에서 일찍 필터링하는 것이 좋습니다. 그러나 서비스의 관리 특성으로 인해 일부 세부정보의 직접적인 조치 가능 여부에는 제한이 있습니다. 쿼리 실행 및 성능을 개선하기 위한 권장사항과 기법은 쿼리 계산 최적화를 참조하세요.

다음 단계