BigQuery 워크로드 관리 문제 해결

이 문서에서는 예약 할당 및 할당, 예약 구성 오류, 용량 약정, 슬롯 경합, 예약 모니터링을 비롯한 BigQuery 워크로드 관리의 일반적인 문제를 해결하는 방법을 보여줍니다.

예약, 약정, 관리 리소스 차트를 보고 관리하려면 관리 프로젝트에 BigQuery 리소스 뷰어 (roles/bigquery.resourceViewer) 또는 BigQuery 리소스 관리자(roles/bigquery.resourceAdmin) 역할과 같은 필수 ID 및 액세스 관리(IAM) 역할이 있어야 합니다. 자세한 내용은 IAM으로 액세스 제어를 참고하세요.

예약 관련 문제 해결하기

다음 정보를 사용하여 슬롯 추가 시 발생하는 오류, BigQuery 작업에 예약이 사용되지 않는 이유, 인식되지 않는 예약 등 예약과 관련된 일반적인 문제를 해결하세요.

예약 크기에 슬롯을 더 추가할 수 없음

예약에 슬롯을 추가하려고 할 때 Failed to allocate slots for reservation in the current system state 또는 Failed to update reservation: Failed to allocate slots for reservation와 같은 오류가 발생하면 일반적으로 일시적인 문제입니다. 이 문제를 완화하려면 다음 단계를 따르세요.

  • 슬롯 수를 줄여서 다시 시도하세요.
  • 더 적은 수의 슬롯으로 시도했는데 실패하면 15분 동안 기다린 후 작업을 다시 시도하세요.

여러 번 다시 시도하고 30분 동안 기다린 후에도 동일한 오류가 계속 표시되면 Cloud Customer Care에 문의하세요.

이 요청을 완료할 수 있는 할당량이 부족합니다.

오류 메시지에 There is insufficient quota to complete this request가 표시되면 요청이 프로젝트에 설정된 할당량 한도를 초과한 것입니다.

이 오류를 해결하려면 다음 중 한 가지를 따르세요.

  • 요청이 할당량 한도를 초과하지 않도록 예약에 더 적은 수의 슬롯을 추가합니다.
  • 해당 리전에서 할당량 상향을 요청합니다. 자세한 내용은 할당량 증가 요청을 참고하세요.

BigQuery에서 작업을 실행하는 데 사용되지 않는 예약

생성한 예약을 사용하는 대신 온디맨드 요금 또는 무료 공유 슬롯 풀을 사용하여 작업이 실행될 수 있는 시나리오가 여러 개 있습니다.

질문과 예약이 서로 다른 리전에 있음

예약은 리전별 리소스입니다. 쿼리는 쿼리에서 참조되는 테이블과 동일한 위치에서 실행됩니다.

테이블의 위치가 예약의 위치와 일치하지 않으면 쿼리에서 예약을 사용하지 않고 대신 주문형 가격 책정 (또는 적격한 일괄 로드 및 내보내기 작업의 경우 무료 공유 슬롯 풀)을 사용하여 실행됩니다.

예약이 생성되었지만 프로젝트가 할당되지 않았습니다.

예약의 슬롯을 사용하려면 프로젝트, 폴더 또는 조직을 특정 예약에 할당하는 할당을 만들어야 합니다. 프로젝트에 해당하는 예약 할당이 있는지 확인합니다.

작업 유형 불일치

할당을 만들 때 올바른 작업 유형을 선택해야 합니다. 그렇지 않으면 작업에서 예약을 사용하지 않습니다.

예를 들어 작업 유형으로 PIPELINE를 선택하면 모든 쿼리 작업이 주문형 가격 책정을 사용하여 실행됩니다. 할당 유형을 QUERY으로 변경하여 예약으로 쿼리 작업을 실행합니다.

멀티 문 쿼리

멀티 문 쿼리를 실행하는 경우 하위 작업이 예약 하에 실행되더라도 상위 작업 객체에는 연결된 예약이 없습니다.

작업에서 실제로 예약을 사용했는지 확인하려면 하위 작업 메타데이터를 확인하세요.

캐시된 결과 검색

쿼리 작업이 캐시된 결과를 가져오면 BigQuery에서 계산을 실행하지 않고 임시 테이블에서 직접 결과를 가져오기 때문에 예약 필드가 비어 있습니다.

변경 데이터 캡처 행 수정 작업

변경 데이터 캡처 (CDC) 테이블이 있는 경우 BigQuery는 max_staleness 간격 내에 보류 중인 행 수정을 BACKGROUND 할당 유형을 사용하는 백그라운드 작업으로 적용합니다. BACKGROUND 할당이 없으면 이러한 작업은 주문형 요금을 사용합니다. 예상치 못한 주문형 비용이 발생하지 않도록 프로젝트에 BACKGROUND 할당을 만드는 것이 좋습니다. 작업 식별자의 queueworker_cdc_background_merge_coalesce 하위 문자열로 이러한 작업을 식별할 수 있습니다.

외부 서비스를 사용하는 BigQuery ML 모델 유형

프로젝트에서 ML_EXTERNAL 작업 유형이 있는 예약 할당을 찾을 수 없는 경우 외부 모델 생성 작업은 주문형 가격 책정을 사용하여 실행됩니다. QUERY 작업 유형 할당은 표준 BigQuery ML 모델 및 행렬 분해 모델 (Enterprise 또는 Enterprise Plus 버전 예약 필요)에 적용되는 반면, 외부 모델에는 ML_EXTERNAL 할당이 필요합니다. 자세한 내용은 BigQuery 워크로드에 슬롯 할당을 참고하세요.

프로젝트에서 식별된 인식할 수 없는 예약

BigQuery는 BigQuery의 특정 작업을 위한 무료 공유 슬롯 풀을 나타내는 예약을 소유합니다.

default-pipeline

기본적으로 BigQuery에서 데이터를 일괄 로드하거나 일괄 내보내기할 때는 무료 공유 슬롯 풀이 사용됩니다. 이러한 로드 또는 추출 작업을 검사하면 예약 필드에 default-pipeline이 표시됩니다.

공유 슬롯 풀을 사용하는 데는 비용이 청구되지 않습니다. 일관되고 예측 가능한 성능을 원한다면 PIPELINE 예약을 구매하는 것이 좋습니다.

예약 관리 작업 문제 해결

예약을 만들거나 업데이트할 때 다음 오류가 발생할 수 있습니다.

예약 크기 또는 기준 슬롯은 50의 배수여야 합니다.

오류 메시지

  • Max reservation size can only be configured in multiples of 50, except when covered by excess commitments.
  • Baseline slots can only be configured in multiples of 50, except when covered by excess commitments.

원인

슬롯은 항상 50의 배수로 자동 확장됩니다. BigQuery는 실제 사용량을 기준으로 슬롯을 확장하고 가장 가까운 50개 슬롯 단위로 반올림합니다. 약정이 없거나 약정으로 증가분을 충당할 수 없는 경우 기준 및 자동 확장 슬롯을 50의 배수로만 늘릴 수 있습니다.

baseline slots 또는 max reservation size - baseline slots이 50의 배수가 아니고 초과 용량 약정으로 처리되지 않는 경우 예약이 최대 예약 크기로 수직 확장될 수 없으므로 이 오류가 발생합니다.

해결 방법

다음 중 하나를 수행합니다.

  • 슬롯 증가를 충당하기 위해 용량 약정을 추가로 구매합니다.
  • 기준 및 최대 슬롯을 50의 배수로 선택합니다.

용량 약정 문제 해결

이 섹션에서는 BigQuery 용량 약정에 문제가 발생할 경우 도움이 될 수 있는 문제 해결 단계를 설명합니다.

구매한 슬롯 대기 중

슬롯은 사용 가능한 용량에 따라 달라집니다. 슬롯 약정을 구매하고 BigQuery가 이를 할당하면 상태 열에 체크표시가 나타납니다. BigQuery가 요청된 슬롯을 즉시 할당할 수 없으면 상태 열이 대기 상태로 유지됩니다. 슬롯을 사용할 수 있게 될 때까지 몇 시간 정도 기다려야 할 수도 있습니다. 슬롯에 더 빠르게 액세스해야 하면 다음을 시도해보세요.

  1. 대기 중인 약정을 삭제합니다.
  2. 더 적은 수의 슬롯에 대한 새 약정을 구매합니다. 용량에 따라 소규모 약정은 즉시 활성화될 수 있습니다.
  3. 나머지 슬롯을 별도의 약정으로 구매합니다. 이러한 슬롯은 상태 열에서 대기 중으로 표시될 수 있지만 일반적으로 몇 시간 내에 활성화됩니다.
  4. 선택사항: 두 약정이 모두 활성화되면 두 약정이 동일한 리전 및 버전이고 약정 요금제가 동일한 경우 단일 약정으로 병합합니다.

슬롯 약정이 실패하거나 완료하는 데 시간이 오래 걸리는 경우 일시적으로 온디맨드 요금을 사용하는 것이 좋습니다. 이 솔루션을 사용하면 예약에 할당되지 않은 다른 프로젝트에서 중요한 쿼리를 실행하거나, None에 프로젝트를 할당하거나, 프로젝트 할당을 완전히 삭제할 수 있습니다.

슬롯 경합 문제 해결

모든 작업을 실행할 슬롯이 충분하지 않으면 슬롯 경합이 발생하여 성능 문제가 발생할 수 있습니다. 워크로드 증가 또는 환경 구성 변경으로 인해 성능이 저하되는지 분석하려면 예약 및 프로젝트 전반에서 두 시스템 간격을 비교하면 됩니다.

슬롯 경합 문제를 해결하려면 다음 단계와 권장사항을 사용하세요.

이 권장사항을 시도했지만 작업 성능 문제가 계속되면 지원을 요청하세요.

작업 동시 실행 급증

관리 리소스 차트의 세부정보 뷰를 사용하여 동시 슬롯 사용량 급증이 있는 작업 실행의 갑작스러운 급증을 확인합니다. 이러한 급증은 예약에서 사용할 수 있는 슬롯을 두고 경쟁하는 작업이 너무 많다는 것을 나타낼 수 있습니다.

권장사항: 리소스 집약적인 쿼리를 최적화하거나 예약의 슬롯 용량을 늘리는 것이 좋습니다. 쿼리 성능 최적화에 관한 자세한 내용은 쿼리 계산 최적화를 참고하세요.

슬롯 사용량이 높음

세부정보 뷰를 사용하여 작업 기간이 늘어났는지 확인합니다. 특히 예약의 최대 용량을 초과하는 작업이 있는 경우에 유용합니다. 슬롯 사용량이 지속적으로 높으면 슬롯 경합이 계속되고 있음을 나타낼 수 있습니다.

권장사항: 작업 탐색기 슬롯 경합 필터를 사용하여 쿼리를 확인하고, 가장 많은 슬롯을 소비하는 쿼리를 식별하고 최적화합니다.

긴 작업 기간

작업이 완료되는 데 시간이 오래 걸리는 경우 세부정보 뷰를 확인합니다. 작업 동시 실행 및 슬롯 사용량이 급증하면 슬롯 경합이 발생할 수 있습니다.

권장사항: 중요하지 않은 작업을 일시중지하거나 전체 작업 제출률을 줄여 중요한 작업을 격리합니다.

슬롯 경합 메시지

통계 테이블에는 슬롯 경합 문제를 나타내는 There were NUMBER jobs detected with slot_contention in the reservation.과 같은 메시지가 표시될 수 있습니다. 작업 탐색기에서 이러한 메시지에 표시된 특정 작업에 관한 세부정보를 검토하세요.

권장사항: 식별된 쿼리를 최적화하거나 예약의 슬롯 할당을 조정합니다.

예약 모니터링 문제 해결

다음 섹션에서는 BigQuery 예약 및 슬롯 사용량을 모니터링할 때 발생하는 일반적인 문제를 해결하는 방법을 설명합니다.

슬롯 사용량 측정항목이 INFORMATION_SCHEMA와 일치하지 않음

리소스 차트의 슬롯 사용량 측정항목과 INFORMATION_SCHEMA 데이터 간에 불일치가 발생하는 경우 다음을 시도해 보세요.

  • 세부사항을 줄입니다. 차트의 기간 단위를 1시간 간격에서 1초 간격으로 변경합니다.
  • 집계 정렬 리소스 차트와 INFORMATION_SCHEMA 데이터 간에 일치하는 집계 방법을 사용해야 합니다. 예를 들어 리소스 차트에서 최고 사용량을 더 잘 반영하려면 측정항목 집계를 p99 또는 p90으로 일관되게 변경합니다.

유휴 슬롯이 사용 중지되면 차용된 슬롯이 표시됨

하나 이상의 예약에 ignore_idle_slots=true이 설정되어 있어도 모니터링 차트에 borrowed_slots 값이 0이 아닌 값으로 표시될 수 있습니다. 이 설정은 예약이 유휴 슬롯을 차용하지 못하도록 하지만 사용하지 않는 슬롯을 다른 예약에 대여하는 것은 허용합니다.

이러한 차용 슬롯은 다음과 같은 경우에 표시됩니다.

  • 다른 예약에 대여 ignore_idle_slots=true이 있는 예약은 유휴 슬롯 차용을 허용하는 (ignore_idle_slots=false) 동일한 관리 프로젝트, 리전, 버전의 다른 예약에 사용하지 않는 기준 슬롯을 빌려줄 수 있습니다. 관리 프로젝트, 리전, 버전의 모든 예약에 ignore_idle_slots=true이 있는 경우 유휴 슬롯은 예약 간에 공유되지 않습니다.

    예를 들어 예약 A에 슬롯이 100개 있고 사용량이 0이며 ignore_idle_slots=true로 구성되어 있다고 가정해 보겠습니다. 예약 B는 동일한 관리 프로젝트, 리전, 버전에 있으며 슬롯이 100개이고 워크로드에 슬롯이 150개 필요하며 ignore_idle_slots=false로 구성되어 있습니다. 예약 B는 예약 A에서 유휴 슬롯 50개를 차용하여 요구사항을 충족할 수 있습니다. 이 경우 모니터링 차트에는 예약 A에 50개의 lent_slots가 표시되고 예약 B에 50개의 borrowed_slots가 표시됩니다.

  • 사용량이 용량을 초과합니다. 예약의 슬롯 사용량이 일시적으로 용량 (기준 + 자동 확장 슬롯)을 초과하면 모니터링 차트에 이 차이가 borrowed_slots로 표시됩니다. 이 동작은 ignore_idle_slots=true이 있는 예약에서도 발생할 수 있습니다.

슬롯 사용량이 기준 및 확장된 슬롯의 합계를 초과할 수도 있습니다. 기준 및 확장된 슬롯의 합계보다 많은 슬롯 사용량에 대해서는 요금이 청구되지 않습니다.

차용된 슬롯은 예약이 완전히 사용되기 전에 표시됩니다.

모니터링 대시보드는 샘플링된 데이터를 사용하므로 샘플링 간격 내의 슬롯 사용 시점을 정확하게 반영하지 않을 수 있습니다.

슬롯 사용량을 더 정확하게 분석하려면 INFORMATION_SCHEMA.RESERVATIONS_TIMELINE 뷰의 borrowed_slots 및 lent_slots 열과 같은 유휴 슬롯 관련 열을 쿼리하세요.

다음 단계