Resolver problemas de gerenciamento de cargas de trabalho do BigQuery

Neste documento, mostramos como resolver problemas comuns com o gerenciamento de cargas de trabalho do BigQuery, incluindo alocação e atribuições de reserva, erros de configuração de reserva, compromissos de capacidade, contenção de slots, monitoramento de reserva e registro de conversas de análise de conversas.

Para visualizar e gerenciar reservas, compromissos e gráficos de recursos administrativos, verifique se você tem os papéis necessários do Identity and Access Management (IAM), como o papel de 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 para 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 slots à sua reserva, geralmente é um problema temporário. Para reduzir o problema, faça o seguinte:

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

Se, depois de tentar várias vezes e aguardar 30 minutos, 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, siga um destes procedimentos:

  • 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 de usar a 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 que as 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 usando preços sob demanda (ou o pool de slots compartilhados sem custo financeiro para jobs de carregamento e exportação em lote qualificados).

Como 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 colocalizada. Se você criar a reserva na região colocalizada do BigQuery, a consulta será executada usando preços 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 correspondente 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 usarão a reserva.

Por exemplo, se você selecionar PIPELINE como o tipo de serviço, todos os jobs de consulta serão executados usando o preço on demand. 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 pai não terá uma reserva associada a ele, 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 em cache

Quando um job de consulta recupera resultados em cache, o campo de reserva fica vazio porque o BigQuery não realiza cálculos 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 as 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 BACKGROUND, esses jobs vão usar preços sob demanda. Crie uma atribuição BACKGROUND para o projeto para evitar custos inesperados de on demand. É possível identificar esses jobs pela substring queueworker_cdc_background_merge_coalesce no identificador do job.

Tipos de modelo 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 on demand. A atribuição do tipo de job QUERY se aplica a modelos padrão do BigQuery ML e modelos 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 a 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 custo financeiro. 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 um desempenho consistente e previsível, considere comprar uma reserva de PIPELINE.

Resolver problemas em 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 escalona os slots com base no uso real e arredonda para o incremento de 50 slots mais próximo. Quando não há compromisso ou se o compromisso não pode cobrir os aumentos, só é possível aumentar os slots de referência e 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 slots.
  • Escolha slots de referência e máximos que sejam incrementos de 50.

Não é possível usar o máximo de slots sem ativar a imparcialidade baseada em reserva

Mensagem de erro

  • Cannot use max slots without enabling reservation-based fairness.

Causa

Você está tentando configurar uma capacidade máxima de reserva, por exemplo, max_slots ou reservas previsíveis, o que exige que a imparcialidade baseada em reserva esteja ativada no projeto que possui a reserva.

Resolução

É necessário ativar a imparcialidade baseada em reservas no projeto.

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 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 preços sob demanda temporariamente. Com essa solução, é possível executar consultas críticas em um projeto diferente que não esteja atribuído a nenhuma reserva, atribuir o projeto a None ou remover totalmente a atribuição do projeto.

Resolver problemas de contenção de slots

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

Para resolver problemas de contenção de slots, use as etapas e as práticas recomendadas a seguir.

Se você tentou essas práticas recomendadas, mas ainda está com problemas de desempenho do job, solicite suporte.

Picos de simultaneidade de jobs

Use a visualização detalhada nos gráficos de recursos administrativos para verificar se há 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 as consultas que consomem muitos recursos ou aumente a capacidade de slots da reserva. Para mais informações sobre como otimizar o desempenho de consultas, consulte Otimizar a computação de consultas.

Uso intenso de slots

Use a visualização detalhada para verificar se há aumento na duração dos jobs, especialmente se houver jobs que excedam a capacidade máxima da reserva. O uso consistentemente alto de slots pode indicar uma contenção de slots em andamento.

Prática recomendada: verifique as consultas usando o filtro de contenção de slots do explorador de jobs para identificar as consultas que consomem mais slots e otimizá-las.

Duração longa do job

Se os jobs estiverem demorando muito mais para serem concluídos, verifique a visualização detalhada. A alta simultaneidade de jobs e os picos de uso de slots podem indicar contenção de slots.

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

Mensagens de contenção de slot

A tabela de insights pode exibir mensagens como There were NUMBER jobs detected with slot_contention in the reservation. que indicam problemas de contenção de slots. Verifique o explorador de jobs para conferir 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 as reservas do BigQuery e o uso de slots.

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

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

  • Reduza a granularidade. Mude a granularidade do gráfico para intervalos de 1 segundo, em vez de intervalos de 1 hora.
  • Alinhar agregação. Verifique se você está usando 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 pico de uso 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 inativos estão desativados

Os 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 slots 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 utilizados 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, 0 de uso 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 emprestados 50 slots inativos da reserva A para atender às necessidades dela. Quando isso ocorre, os gráficos de monitoramento informam 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 (slots de base + escalonamento automático), 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 do Monitoring usam dados de amostra, 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 as colunas relacionadas a slots ociosos, como as colunas borrowed_slots e lent_slots na visualização INFORMATION_SCHEMA.RESERVATIONS_TIMELINE.

Resolver problemas de registro de conversas

Use as informações a seguir para resolver problemas comuns com o registro de conversas da análise de conversação no BigQuery. Como os erros de geração de registros nunca interrompem uma conversa e não são informados no chat ou no Cloud Logging, uma tabela de destino vazia ou ausente é o principal sinal de um problema de configuração ou permissão.

A tabela de registros está ausente ou vazia

Se a tabela de destino não for criada ou permanecer vazia após uma conversa, verifique as seguintes causas possíveis:

  • O registro de conversas não é salvo nem publicado. No BigQuery Studio, atualize a página, reabra as configurações do agente e confirme se a opção Ativar registro de conversas está ativada, se o conjunto de dados e a tabela de destino estão definidos e se as mudanças foram publicadas.

  • O conjunto de dados de destino está ausente ou em um projeto diferente. Confirme se o conjunto de dados de destino já existe no mesmo projeto que o agente de dados. Para verificar se o conjunto de dados existe, execute bq show PROJECT_ID:LOG_DATASET. Substitua PROJECT_ID pelo ID do projeto que contém o agente de dados e LOG_DATASET pelo ID do conjunto de dados de destino. O agente de serviço cria a tabela de registros na primeira rodada registrada, mas não cria o conjunto de dados.

  • Permissões de agente de serviço ou CMEK ausentes. Confirme se o agente de serviço da API Conversational Analytics (service-PROJECT_NUMBER@gcp-sa-geminidataanalytics.iam.gserviceaccount.com, usando o número do projeto do agente em vez do ID do projeto) tem o papel de Editor de dados do BigQuery (roles/bigquery.dataEditor) no conjunto de dados de registro. Se o conjunto de dados usar chaves do Cloud KMS gerenciadas pelo cliente (CMEK), confirme se a conta de serviço de criptografia do BigQuery (bq-PROJECT_NUMBER@bigquery-encryption.iam.gserviceaccount.com) tem o papel roles/cloudkms.cryptoKeyEncrypterDecrypter na chave.

  • A plataforma de conversa ou a configuração do agente não é compatível. As conversas no painel Prévia do BigQuery Studio não são registradas. Teste na tela de chat principal do agente publicado. Os agentes que usam um escopo de pesquisa em vez de tabelas específicas do BigQuery, que configuram gráficos de propriedades como fontes de conhecimento ou que não declaram nenhuma tabela do BigQuery não são registrados. Saiba mais em Limitações.

  • As tabelas de fontes de conhecimento usam políticas de acesso. Se alguma tabela de fonte de conhecimento usar políticas de acesso no nível da linha, segurança no nível da coluna (tags de política) ou mascaramento de dados dinâmicos, as interações não serão registradas.

  • Conflito de esquema em uma tabela de destino atual. Se você configurou uma tabela atual como destino e uma coluna tem o mesmo nome de uma coluna do esquema de registro de conversas, mas tem um tipo ou modo diferente, o BigQuery não grava linhas nessa tabela.

As linhas geralmente aparecem alguns segundos após a conclusão de uma rodada. Se as linhas ainda não aparecerem depois de alguns minutos, atualize o conjunto de dados.

As conversas de alguns usuários não são registradas

Causa

Antes de cada turno, a verificação de privacidade usa as credenciais do usuário que está conversando para verificar se as tabelas de origem de conhecimento do agente não têm políticas de segurança no nível da linha, segurança no nível da coluna ou mascaramento de dados. Se um usuário não tiver permissão para executar essa verificação, as interações dele não serão registradas.

Resolução

Conceda a todos os usuários do chat o papel de Leitor de dados do BigQuery (roles/bigquery.dataViewer) nas tabelas de fonte de conhecimento e o papel de Usuário de jobs do BigQuery (roles/bigquery.jobUser) no projeto que executa as consultas deles ou conceda um papel personalizado com as permissões bigquery.tables.get e bigquery.rowAccessPolicies.list nas tabelas de fonte de conhecimento.

A gravação do agente falha com um erro INVALID_ARGUMENT

Mensagem de erro

  • The BigQuery Agent Analytics table must be in the same project as the agent (agent project: ..., table project: ...).

  • BigQuery Agent Analytics can only be enabled on agents whose datasource is BigQuery. Remove bigquery_agent_analytics_enabled and bigquery_agent_analytics_table, or point the agent at a BigQuery datasource.

Causa

O conjunto de dados de destino está em um projeto diferente do agente de dados ou a fonte de dados do agente não é o BigQuery.

Resolução

Selecione um conjunto de dados de destino no mesmo projeto do agente de dados ou configure o agente de dados com uma fonte de dados do BigQuery.

A concessão de acesso ao conjunto de dados falha porque o agente de serviço não existe

Mensagem de erro

  • Service account service-PROJECT_NUMBER@gcp-sa-geminidataanalytics... does not exist

Causa

O agente de serviço da API Conversational Analytics ainda não foi provisionado no projeto.

Resolução

Escolha uma destas opções:

  • Configure o destino do registro no agente primeiro e, em seguida, conceda o papel novamente.

  • Provisione a identidade de serviço executando o seguinte comando:

    gcloud beta services identity create \
        --service=geminidataanalytics.googleapis.com \
        --project=PROJECT_ID

    Substitua PROJECT_ID pelo ID do projeto que contém o agente de dados.

As configurações de registro de conversas não estão disponíveis no BigQuery Studio

Causa

Você está visualizando a versão Publicada do agente de dados, em que as configurações são somente leitura, ou o agente de dados não tem tabelas do BigQuery específicas selecionadas como fontes de conhecimento.

Resolução

Mude o seletor de visualização para Rascunho, verifique se as tabelas do BigQuery específicas estão selecionadas como fontes de conhecimento, atualize as configurações de geração de registros de conversas e publique o agente.

A seguir