슬롯

BigQuery 슬롯은 SQL 쿼리를 실행하는 데 필요한 연산 능력의 단위입니다. BigQuery는 쿼리 크기와 복잡성에 따라 각 쿼리에 필요한 슬롯 수를 자동으로 계산합니다.

프로젝트당 슬롯 할당량은 쿼리의 할당량 정책을 참조하세요.

대부분의 사용자에게는 기본 슬롯 용량이면 충분합니다. 더 많은 슬롯에 액세스한다고 해서 더 빠른 쿼리당 성능이 보장되는 것은 아닙니다. 그러나 슬롯 풀이 클수록 매우 크거나 복잡한 쿼리의 성능은 물론 동시 워크로드의 성능이 향상될 수 있습니다. 계정에서 사용하는 슬롯 수를 확인하려면 BigQuery 모니터링을 참조하세요.

BigQuery는 고객의 이용 내역, 사용량, 지출액을 근거로 슬롯 할당량을 자동으로 관리합니다. 월별 분석 비용 지출이 일정해야 하는 고객을 위해 BigQuery는 정액제를 제공합니다.

정액제에 등록하면 쿼리 처리에 사용할 일정 수의 전용 슬롯을 구매하게 됩니다. 결제 계정에 연결된 모든 프로젝트에 대해 위치별로 슬롯 할당을 지정할 수 있습니다. 정액제에 관심이 있으시면 영업 담당자에게 문의하세요.

슬롯을 사용한 쿼리 실행

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

BigQuery 쿼리 실행은 동적입니다. 즉, 쿼리가 실행되는 동안 쿼리 계획이 수정될 수 있습니다. 쿼리가 실행 중인 동안에 스테이지를 도입하는 목적은 쿼리 작업자 전체의 데이터 배포를 향상시키기 위한 경우가 많습니다.

BigQuery는 동시에 여러 스테이지를 실행할 수 있습니다. BigQuery는 쿼리 실행 속도를 높이기 위해 예측 실행을 활용하고, 동시 처리를 최적화하기 위해 스테이지의 파티션을 동적으로 나눌 수 있습니다.

BigQuery 슬롯은 쿼리의 각 스테이지별로 개별 작업 단위를 실행합니다. 예를 들어 BigQuery에서 스테이지의 최적 동시 처리 계수를 10으로 결정하면 해당 스테이지를 처리하기 위해 10개의 슬롯을 요청합니다.

쿼리 슬롯

BigQuery SQL 쿼리는 동적 DAG임

슬롯 리소스 절약 모드로 쿼리 실행

쿼리가 현재 사용 가능한 슬롯보다 더 많은 슬롯을 요청하면 BigQuery는 개별 작업 단위를 큐에 추가한 후 슬롯이 사용 가능해질 때까지 대기합니다. 쿼리 실행이 진행되고 슬롯이 확보되면 큐에 추가된 작업 단위 중 실행 대상 작업이 자동으로 선택됩니다.

BigQuery는 특정 쿼리 스테이지에 대해 아무리 많은 슬롯이라도 요청할 수 있습니다. 요청된 슬롯 수는 구매한 용량과는 관련 없으며, 해당 스테이지에 대해 BigQuery가 결정한 가장 최적의 동시 처리 계수를 나타냅니다. 작업 단위는 큐에 추가되고 슬롯 사용이 가능해지면 실행됩니다.

쿼리 요구가 커밋된 슬롯을 초과해도 추가 슬롯에 대한 비용은 청구되지 않으며, 추가 주문형 요금에 대해서도 비용이 청구되지 않습니다. 개별 작업 단위는 단순히 큐에 추가되는 것입니다.

예를 들면 다음과 같습니다.

  1. 쿼리 스테이지에서 2,000개의 슬롯을 요청했지만 1,000개만 사용 가능하다고 가정해 보겠습니다.
  2. BigQuery는 1,000개의 슬롯은 모두 사용하고 나머지 1,000개의 슬롯은 큐에 추가합니다.
  3. 그 후에 100개의 슬롯 작업이 완료되면 큐에 있는 1,000개의 작업 단위에서 100개의 작업 단위가 동적으로 선택됩니다. 이제 900개의 작업 단위가 큐에 남게 됩니다.
  4. 그런 다음 500개의 슬롯 작업이 완료되면 큐에 남은 900개의 작업 단위에서 500개의 작업 단위가 동적으로 선택됩니다. 이제 400개의 작업 단위가 큐에 남게 됩니다.
  5. 그 후에도 동일한 규칙에 따라 슬롯이 사용됩니다.

슬롯 예약

슬롯 요청이 가용 슬롯 수를 초과한 경우 큐에 추가된 BigQuery 슬롯

BigQuery의 공정 예약

BigQuery는 경쟁 쿼리 간에 리소스를 할당하기 위해 공정 예약을 활용합니다. 즉, 모든 쿼리는 언제든지 사용 가능한 모든 슬롯에 동등하게 액세스할 수 있으며, 각 쿼리에 필요한 용량의 증감에 따라 활성 쿼리 간에 용량을 동적으로 자동 재할당됩니다. 쿼리가 완료되면 새 쿼리가 다음 조건에서 실행되도록 제출됩니다.

  • 새 쿼리가 제출되면 용량은 실행 쿼리 간에 자동으로 재할당됩니다. 각 쿼리에 사용할 수 있는 용량이 추가되면 개별 작업 단위는 상황에 따라 일시 중지, 재개, 큐에 추가될 수 있습니다.
  • 쿼리가 완료될 때마다 해당 쿼리에서 사용된 용량은 자동으로 다른 모든 쿼리에서 즉시 사용할 수 있게 됩니다.
  • 쿼리의 동적 DAG 변경으로 인해 쿼리에 필요한 용량이 변경될 때마다 BigQuery는 이 쿼리와 다른 모든 쿼리용으로 사용 가능한 용량을 자동으로 다시 계산하여 필요에 따라 슬롯을 재할당하거나 일시 중지합니다.

다중 쿼리 예약

BigQuery의 공정 예약

복잡성과 크기에 따라 쿼리는 소유권이 있는 슬롯이 모두 필요하지 않을 수도 있고 더 많은 슬롯이 필요할 수도 있습니다. BigQuery는 공정 예약을 통해 모든 슬롯이 언제든지 완전히 소진되도록 합니다.