Resolver problemas de gerenciamento de cargas de trabalho do BigQuery

Este documento mostra como resolver problemas comuns com o gerenciamento de carga de trabalho do BigQuery, incluindo alocação e atribuições de reserva, erros de configuração de reserva, compromissos de capacidade, disputa de slots e monitoramento de reserva.

Para visualizar e gerenciar gráficos de reservas, compromissos e recursos administrativos, verifique se você tem os papéis necessários do Identity and Access Management (IAM), como Leitor de recursos do BigQuery (roles/bigquery.resourceViewer) ou Administrador de recursos do BigQuery (roles/bigquery.resourceAdmin) no projeto de administração. Para mais informações, consulte Controle de acesso com o IAM.

Resolver problemas com reservas

Use as informações a seguir para resolver problemas comuns com reservas, como erros ao adicionar slots, por que uma reserva não é usada em um job do BigQuery ou reservas não reconhecidas.

Não é possível adicionar mais slots ao tamanho da reserva

Se você encontrar erros como Failed to allocate slots for reservation in the current system state ou Failed to update reservation: Failed to allocate slots for reservation ao tentar adicionar mais assentos à sua reserva, isso geralmente é um problema temporário. Para minimizar o problema, faça o seguinte:

  • Tente de novo com um número menor de intervalos.
  • Se a tentativa com um número menor de slots falhar, aguarde 15 minutos e tente de novo.

Se depois de várias tentativas e 30 minutos de espera você ainda receber o mesmo erro, entre em contato com o Cloud Customer Care.

Não há cota suficiente para concluir esta solicitação

Se a mensagem de erro indicar There is insufficient quota to complete this request, a solicitação excedeu o limite de cota definido para o projeto.

Para resolver esse erro, faça o seguinte:

  • Adicione um número menor de slots à reserva para que a solicitação não exceda o limite de cota.
  • Solicite um aumento de cota na região correspondente. Para mais informações, consulte Solicitar um aumento de cota.

Reserva não usada pelo BigQuery para executar um job

Há vários cenários em que um job pode ser executado usando preços sob demanda ou um pool de slots compartilhados sem custo financeiro em vez da reserva que você criou.

A consulta e a reserva estão em regiões diferentes

As reservas são recursos regionais. Uma consulta é executada no mesmo local das tabelas referenciadas nela.

Se o local de uma tabela não corresponder ao local da reserva, a consulta não usará a reserva e será executada com preços sob demanda ou o pool de slots compartilhados sem custo financeiro para jobs de exportação e carregamento em lote qualificados.

Consultar tabelas do BigQuery Omni

Ao consultar uma tabela do BigQuery Omni, crie a reserva na mesma região da tabela, não em uma região colocada. Se você criar a reserva na região do BigQuery colocada, a consulta será executada usando o preço sob demanda.

A reserva foi criada, mas o projeto não foi atribuído a ela

Para usar os slots em uma reserva, crie uma atribuição que atribua o projeto, a pasta ou a organização à reserva específica. Verifique se o projeto tem uma atribuição para a reserva.

Incompatibilidade de tipo de serviço

Selecione o tipo de serviço correto ao criar uma atribuição. Caso contrário, os jobs não vão usar a reserva.

Por exemplo, se você selecionar PIPELINE como o tipo de serviço, todos os jobs de consulta serão executados usando preços sob demanda. Mude o tipo de atribuição para QUERY para que os jobs de consulta sejam executados usando a reserva.

Consultas de múltiplas instruções

Se você estiver executando consultas de várias instruções, o objeto de job principal não terá uma reserva associada, mesmo que os jobs filhos sejam executados em uma reserva.

Para confirmar se o job realmente usou uma reserva, verifique os metadados do job filho.

Como recuperar resultados armazenados em cache

Quando um job de consulta recupera resultados em cache, o campo de reserva fica vazio porque o BigQuery não realiza nenhum cálculo e busca os resultados diretamente da tabela temporária.

Operações de modificação de linha de captura de dados alterados

Se você tiver tabelas de captura de dados alterados (CDC), o BigQuery vai aplicar modificações de linha pendentes no intervalo max_staleness como jobs em segundo plano que usam o tipo de atribuição BACKGROUND. Se não houver atribuições de BACKGROUND, esses jobs usarão preços sob demanda. Considere criar uma atribuição de BACKGROUND para o projeto e evitar custos inesperados sob demanda. É possível identificar esses jobs pela substring queueworker_cdc_background_merge_coalesce no identificador do job.

Tipos de modelos do BigQuery ML que usam serviços externos

Se nenhuma atribuição de reserva com um tipo de serviço ML_EXTERNAL for encontrada no projeto, os jobs de criação de modelos externos serão executados usando preços sob demanda. A atribuição do tipo de serviço QUERY se aplica a modelos padrão do BigQuery ML e de fatoração de matrizes (que exigem uma reserva da edição Enterprise ou Enterprise Plus), enquanto os modelos externos exigem uma atribuição ML_EXTERNAL. Para mais informações, consulte Atribuir slots às cargas de trabalho do BigQuery.

Reservas não reconhecidas identificadas no projeto

O BigQuery tem reservas que representam um pool de slots compartilhados sem custo financeiro para determinadas operações no BigQuery.

default-pipeline

Por padrão, o carregamento ou a exportação em lote de dados no BigQuery usa um pool de slots compartilhados sem custos financeiros. Ao inspecionar esses jobs de carregamento ou extração, o campo de reserva mostra default-pipeline.

Não há cobranças pelo uso do pool de slots compartilhado. Se você quiser uma performance consistente e previsível, considere comprar uma reserva de PIPELINE.

Resolver problemas com tarefas de gerenciamento de reservas

Os seguintes erros podem ocorrer ao criar ou atualizar uma reserva.

O tamanho da reserva ou os slots de valor de referência precisam ser múltiplos de 50

Mensagem de erro

  • 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.

Causa

Os slots sempre são escalonados automaticamente para um múltiplo de 50. O BigQuery aumenta os slots com base no uso real e arredonda para o incremento de 50 slots mais próximo. Quando não há um compromisso ou se ele não pode cobrir os aumentos, só é possível aumentar o valor de referência e os slots de escalonamento automático em múltiplos de 50.

Se baseline slots ou max reservation size - baseline slots não for um múltiplo de 50 (e não estiver coberto por compromissos de capacidade excedente), a reserva não poderá ser escalonar verticalmente até o tamanho máximo, resultando nesse erro.

Resolução

Escolha uma destas opções:

  • Compre mais compromissos de capacidade para cobrir os aumentos de slot.
  • Escolha slots de referência e máximos que sejam incrementos de 50.

Resolver problemas de compromissos de capacidade

Nesta seção, descrevemos etapas de solução de problemas que podem ser úteis se você tiver problemas com os compromissos de capacidade do BigQuery.

Slots comprados pendentes

Os slots estão sujeitos à capacidade disponível. Quando você compra compromissos de slot e o BigQuery os aloca, a coluna Status mostra uma marca de verificação. Se o BigQuery não conseguir alocar os slots solicitados imediatamente, a coluna Status vai permanecer pendente. Talvez seja preciso esperar várias horas para que os slots sejam disponibilizados. Se você precisar de acesso aos slots mais cedo, tente o seguinte:

  1. Excluir o compromisso pendente.
  2. Adquira um novo compromisso para um número menor de slots. Dependendo da capacidade, o compromisso menor pode ficar ativo imediatamente.
  3. Compre os slots restantes como um compromisso separado. Esses slots podem ser exibidos como pendentes na coluna Status, mas geralmente ficam ativos em algumas horas.
  4. Opcional: quando os dois compromissos forem ativados, mescle-os em um único compromisso, desde que ambos estejam na mesma região e edição e tenham o mesmo plano de compromisso.

Se um compromisso de slot falhar ou demorar muito para ser concluído, considere usar o preço sob demanda temporariamente. Com essa solução, é possível executar consultas críticas em um projeto diferente que não está atribuído a nenhuma reserva, atribuir o projeto a None ou remover a atribuição do projeto.

Resolver problemas de contenção de slot

A contenção de slots pode ocorrer quando não há slots suficientes para executar todos os seus jobs, causando problemas de desempenho. Para analisar se a degradação da performance decorre de aumentos na carga de trabalho ou de mudanças na configuração do ambiente, compare dois intervalos do sistema em reservas e projetos.

Para resolver problemas de disputa de slots, siga estas etapas e práticas recomendadas.

Se você seguiu essas práticas recomendadas, mas ainda está com problemas de performance do trabalho, solicite suporte.

Picos de simultaneidade de jobs

Use a visualização detalhada nos gráficos de recursos administrativos para verificar um aumento repentino nas execuções de jobs com picos simultâneos de uso de slots. Esses picos podem indicar que muitos jobs estão disputando os slots disponíveis na sua reserva.

Prática recomendada:otimize consultas que consomem muitos recursos ou aumente a capacidade de slots da sua reserva. Para mais informações sobre como otimizar o desempenho das consultas, consulte Otimizar a computação de consultas.

Uso alto de slots

Use a visualização detalhada para verificar se houve aumento na duração dos jobs, principalmente se houver jobs que excedam a capacidade máxima da sua reserva. O uso consistentemente alto de slots pode indicar uma disputa contínua.

Prática recomendada:verifique as consultas usando o filtro de disputa de slots do explorador de jobs para identificar e otimizar as consultas que consomem mais slots.

Durações longas de jobs

Se os jobs estiverem demorando muito para serem concluídos, confira a visualização detalhada. Picos altos de simultaneidade de jobs e uso de slots podem indicar disputa de slots.

Prática recomendada:isole os jobs críticos pausando temporariamente os menos importantes ou reduzindo a taxa geral de envio de jobs.

Mensagens de contenção de slot

A tabela de insights pode mostrar mensagens como There were NUMBER jobs detected with slot_contention in the reservation., que indicam problemas de disputa de slots. Confira o explorador de jobs para analisar detalhes sobre os jobs específicos sinalizados nessas mensagens.

Prática recomendada:otimize as consultas identificadas ou ajuste a alocação de slots da sua reserva.

Resolver problemas no monitoramento de reservas

As seções a seguir descrevem como resolver problemas comuns ao monitorar reservas do BigQuery e o uso de slots.

As métricas de uso de slot não correspondem a INFORMATION_SCHEMA

Se você encontrar discrepâncias entre as métricas de uso de slots nos gráficos de recursos e os dados do INFORMATION_SCHEMA, tente o seguinte:

  • Reduza a granularidade. Mude a granularidade do gráfico para intervalos de 1 segundo em vez de 1 hora.
  • Alinhar agregação. Use métodos de agregação que se alinham entre os gráficos de recursos e os dados do INFORMATION_SCHEMA. Por exemplo, para refletir melhor o uso máximo nos gráficos de recursos, mude a agregação de métricas para p99 ou p90 de forma consistente.

Os slots emprestados aparecem quando os slots ociosos estão desativados

Seus gráficos de monitoramento podem mostrar um valor diferente de zero para borrowed_slots, mesmo que ignore_idle_slots=true esteja definido para uma ou mais reservas. Essa configuração impede que uma reserva pegue emprestado slots inativos, mas não impede que ela empreste os slots não utilizados para outras reservas.

Esses intervalos emprestados aparecem nos seguintes casos:

  • Empréstimo para outras reservas Uma reserva com ignore_idle_slots=true pode emprestar os slots de valor de referência não usados para outras reservas no mesmo projeto de administração, região e edição que permitem o empréstimo de slots inativos (ignore_idle_slots=false). Se todas as reservas em um projeto de administração, região e edição tiverem ignore_idle_slots=true, os slots inativos não serão compartilhados entre elas.

    Por exemplo, suponha que a reserva A tenha 100 slots, uso zero e esteja configurada com ignore_idle_slots=true. A reserva B está no mesmo projeto de administração, região e edição, tem 100 slots, precisa de 150 slots para a carga de trabalho e está configurada com ignore_idle_slots=false. A reserva B pode pegar emprestado 50 slots inativos da reserva A para atender às necessidades dela. Quando isso acontece, os gráficos de monitoramento mostram 50 lent_slots para a reserva A e 50 borrowed_slots para a reserva B.

  • Uso excedendo a capacidade. Se o uso de slots de uma reserva exceder temporariamente a capacidade dela (slots de base + escalonados automaticamente), os gráficos de monitoramento vão mostrar essa diferença como borrowed_slots. Esse comportamento pode ocorrer mesmo em reservas com ignore_idle_slots=true.

De vez em quando, o uso de slots pode exceder a soma do valor de referência mais os slots dimensionados. Você não vai receber cobranças pelo uso de slots maior que o valor de referência mais os slots escalonados.

Os slots emprestados aparecem antes que uma reserva seja totalmente usada

Os painéis de monitoramento usam dados amostrados, que podem não refletir com precisão o tempo exato de uso do slot em um intervalo de amostragem.

Para uma análise mais precisa do uso de slots, consulte colunas relacionadas a slots ociosos, como borrowed_slots e lent_slots na visualização INFORMATION_SCHEMA.RESERVATIONS_TIMELINE.

A seguir