Use filas de consultas
O BigQuery determina automaticamente o número de consultas que podem ser executadas em simultâneo, a que se chama concorrência dinâmica. As consultas adicionais são colocadas em fila de espera até que os recursos de processamento fiquem disponíveis. Este documento explica como controlar o objetivo de concorrência máxima e definir o limite de tempo da fila para consultas interativas e em lote.
Vista geral
O BigQuery determina dinamicamente o número de consultas que podem ser executadas em simultâneo com base nos recursos de computação disponíveis. O número de consultas que podem ser executadas em simultâneo é calculado por projeto a pedido ou por reserva. As consultas adicionais são colocadas numa fila até haver capacidade suficiente disponível para iniciar a execução. O comprimento da fila está limitado a 1000 consultas interativas e 20 000 consultas em lote por projeto por região, independentemente de o projeto ser a pedido ou usar uma reserva. O exemplo seguinte mostra o comportamento de um projeto a pedido quando a simultaneidade de consultas calculada é 202:
Para as reservas, tem a opção de definir o objetivo de concorrência máxima, um limite superior para o número de consultas que podem ser executadas em simultâneo numa reserva, para garantir que a cada consulta é atribuído um número mínimo de espaços. Não pode especificar um destino de simultaneidade máxima para um projeto a pedido. Este é sempre calculado dinamicamente.
Comportamento de colocação em fila
O BigQuery aplica uma programação equitativa para garantir que nenhum projeto individual pode consumir todas as posições numa reserva.
As consultas de projetos com a menor quota de concorrência são retiradas da fila primeiro. Durante a execução, os slots são distribuídos de forma justa entre os projetos antes de serem distribuídos entre as tarefas num projeto.
Por exemplo, suponhamos que tem uma reserva atribuída a dois projetos: A e B. O BigQuery calcula 5 para a simultaneidade da reserva. O projeto A tem quatro consultas em execução em simultâneo , o projeto B tem uma consulta em execução e outras consultas estão em fila de espera. Uma consulta do projeto B é retirada da fila primeiro, mesmo que tenha sido enviada após a consulta do projeto A. Depois de uma consulta começar a execução, recebe uma quota justa de espaços na reserva partilhada.
Além do número total de consultas simultâneas, o BigQuery determina dinamicamente o número máximo de consultas em lote simultâneas a executar por projeto a pedido ou reserva. Se o número de consultas em lote em execução em simultâneo atingir este máximo, as consultas interativas têm prioridade, mesmo que tenham sido enviadas mais tarde.
Quando elimina uma reserva, todas as consultas em fila de espera expiram. Quando um projeto atribuído a uma reserva é reatribuído a outra reserva, todos os pedidos em fila ou em execução continuam a ser processados na reserva antiga, enquanto todos os novos pedidos são encaminhados para a nova reserva. Quando um projeto atribuído a uma reserva é removido da reserva, as consultas em execução continuam na reserva, enquanto os pedidos novos e em fila de espera são executados através do modelo a pedido. Opcionalmente, pode cancelar tarefas de consulta individuais em execução ou em fila.
Controlar o limite de tempo da fila
Para controlar o limite de tempo da fila para consultas interativas ou em lote, use a declaração ALTER PROJECT SET OPTIONS
ou a declaração ALTER ORGANIZATION SET OPTIONS
para definir os campos default_interactive_query_queue_timeout_ms
ou default_batch_query_queue_timeout_ms
na configuração predefinida do seu projeto ou organização.
Para ver o limite de tempo da fila para consultas interativas ou em lote no seu projeto,
consulte a vista
INFORMATION_SCHEMA.EFFECTIVE_PROJECT_OPTIONS
.
Para desativar a colocação em fila, defina o limite de tempo da fila como -1. Se atingir a concorrência máxima de consultas, as consultas adicionais falham com um erro ADMISSION_DENIED
.
Defina o alvo de simultaneidade máximo
Pode definir manualmente o objetivo de concorrência máxima quando cria uma reserva. Por predefinição, o objetivo de simultaneidade máximo é zero, o que significa que o BigQuery determina dinamicamente a simultaneidade com base nos recursos disponíveis. Caso contrário, se definir um objetivo diferente de zero, o objetivo de concorrência máximo especifica um limite superior para o número de consultas executadas em simultâneo numa reserva, o que garante uma quantidade mínima de capacidade de espaço disponível para cada consulta executada.
O aumento do objetivo de concorrência máxima não garante que mais consultas sejam executadas em simultâneo. A concorrência real depende dos recursos de computação disponíveis, que podem ser aumentados adicionando mais espaços à sua reserva.
Funções necessárias
Para receber a autorização de que
precisa para definir a simultaneidade numa nova reserva,
peça ao seu administrador para lhe conceder a função do IAM de
Editor de recursos do BigQuery (roles/bigquery.resourceEditor
)
no
projeto de administração
que mantém a propriedade dos compromissos.
Para mais informações sobre a atribuição de funções, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.
Esta função predefinida contém a autorização
bigquery.reservations.create
, que é necessária para
definir a simultaneidade numa nova reserva.
Também pode obter esta autorização com funções personalizadas ou outras funções predefinidas.
Para mais informações sobre as funções de IAM no BigQuery, consulte o artigo Funções e autorizações predefinidas.
Defina o objetivo de simultaneidade máxima para uma reserva
Selecione uma das seguintes opções:
Consola
Na Trusted Cloud consola, aceda à página BigQuery.
No menu de navegação, clique em Gestão da capacidade.
Clique em Criar reserva.
Selecione as definições de reserva.
Para expandir a secção Definições avançadas, clique na seta de expansão
.Para definir a simultaneidade de tarefas de destino, clique no botão ativar/desativar Substituir a simultaneidade de tarefas de destino automática para o ativar e introduza a Simultaneidade de tarefas de destino.
Clique em Guardar.
SQL
Para definir o alvo de concorrência máximo para uma nova reserva, use a declaração DDL CREATE RESERVATION
e defina o campo target_job_concurrency
.
Na Trusted Cloud consola, aceda à página BigQuery.
No editor de consultas, introduza a seguinte declaração:
CREATE RESERVATION `ADMIN_PROJECT_ID.LOCATION.RESERVATION_NAME` OPTIONS ( target_job_concurrency = CONCURRENCY);
Substitua o seguinte:
-
ADMIN_PROJECT_ID
: o projeto que detém a reserva -
LOCATION
: a localização da reserva, comoregion-us
-
RESERVATION_NAME
: o nome da reserva -
CONCURRENCY
: o alvo de concorrência máximo
-
Clique em
Executar.
Para mais informações sobre como executar consultas, consulte o artigo Execute uma consulta interativa.
bq
Para definir o objetivo de concorrência máxima para uma nova reserva, execute o comando bq mk
:
bq mk \ --project_id=ADMIN_PROJECT_ID \ --location=LOCATION \ --target_job_concurrency=CONCURRENCY \ --reservation \ RESERVATION_NAME
Substitua o seguinte:
ADMIN_PROJECT_ID
: o projeto que detém a reservaLOCATION
: a localização da reservaCONCURRENCY
: o alvo de concorrência máximoRESERVATION_NAME
: o nome da reserva
API
Para definir o objetivo de simultaneidade máxima na
API BigQuery Reservation,
defina o campo concurrency
no
recurso de reserva
e chame o
método CreateReservationRequest
.
Atualize o alvo de concorrência máxima
Pode atualizar o objetivo de concorrência máxima de uma reserva em qualquer altura. No entanto, o aumento do destino não garante que sejam executadas mais consultas em simultâneo. A concorrência real depende dos recursos de computação disponíveis. Se reduzir o alvo de concorrência máximo, as consultas em execução ativa não são afetadas, e as consultas em fila não são executadas até o número de consultas concorrentes ficar abaixo do novo alvo.
Se definir o destino de simultaneidade máxima como 0, o BigQuery determina dinamicamente a simultaneidade com base nos recursos disponíveis (o comportamento predefinido).
Funções necessárias
Para receber a autorização de que
precisa para atualizar o objetivo de concorrência máxima de uma reserva,
peça ao seu administrador que lhe conceda a função do IAM
Editor de recursos do BigQuery (roles/bigquery.resourceEditor
)
no
projeto de administração
que mantém a propriedade dos compromissos.
Para mais informações sobre a atribuição de funções, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.
Esta função predefinida contém a autorização
bigquery.reservations.update
, que é necessária para
atualizar o objetivo de concorrência máxima de uma reserva.
Também pode obter esta autorização com funções personalizadas ou outras funções predefinidas.
Para mais informações sobre as funções de IAM no BigQuery, consulte o artigo Funções e autorizações predefinidas.
Atualize o alvo de concorrência máxima para uma reserva
Selecione uma das seguintes opções:
Consola
Na Trusted Cloud consola, aceda à página BigQuery.
No menu de navegação, clique em Gestão da capacidade.
Clique no separador Reservas de horários.
Encontre a reserva que quer atualizar.
Expanda a opção
Ações.Clique em Edit.
Para expandir a secção Definições avançadas, clique na seta de expansão
.Para definir a simultaneidade de tarefas de destino, clique no botão ativar/desativar Substituir a simultaneidade de tarefas de destino automática para o ativar e introduza a Simultaneidade de tarefas de destino.
Clique em Guardar.
SQL
Para atualizar o objetivo de concorrência máxima de uma reserva existente, use a
ALTER RESERVATION
declaração DDL
e defina o
target_job_concurrency
campo.
Na Trusted Cloud consola, aceda à página BigQuery.
No editor de consultas, introduza a seguinte declaração:
ALTER RESERVATION `ADMIN_PROJECT_ID.LOCATION.RESERVATION_NAME` SET OPTIONS ( target_job_concurrency = CONCURRENCY);
Substitua o seguinte:
-
ADMIN_PROJECT_ID
: o projeto que detém a reserva -
LOCATION
: a localização da reserva, comoregion-us
-
RESERVATION_NAME
: o nome da reserva -
CONCURRENCY
: o alvo de concorrência máximo
-
Clique em
Executar.
Para mais informações sobre como executar consultas, consulte o artigo Execute uma consulta interativa.
bq
Para atualizar o objetivo de concorrência máxima de uma reserva existente, execute o comando bq update
:
bq update \ --project_id=ADMIN_PROJECT_ID \ --location=LOCATION \ --target_job_concurrency=CONCURRENCY \ --reservation \ RESERVATION_NAME
Substitua o seguinte:
ADMIN_PROJECT_ID
: o projeto que detém a reservaLOCATION
: a localização da reservaCONCURRENCY
: o alvo de concorrência máximoRESERVATION_NAME
: o nome da reserva
API
Para atualizar o objetivo de simultaneidade máxima na
API BigQuery Reservation,
defina o campo concurrency
no
recurso de reserva
e chame o
método UpdateReservationRequest
.
Monitorização
Para saber que consultas estão a ser executadas e quais estão na fila, consulte as vistas
INFORMATION_SCHEMA.JOBS_BY_*
e
INFORMATION_SCHEMA.JOBS_TIMELINE_BY_*
. O campo state
está definido como RUNNING
para consultas em execução ativa e como PENDING
para consultas em fila.
Para ver quantas consultas simultâneas foram executadas quando o limite de simultaneidade dinâmico foi atingido a cada segundo durante o último dia, execute a seguinte consulta:
SELECT t1.period_start, t1.job_count AS dynamic_concurrency_threshold FROM ( SELECT period_start, state, COUNT(DISTINCT job_id) AS job_count FROM `PROJECT_ID.REGION_ID`.INFORMATION_SCHEMA.JOBS_TIMELINE WHERE period_start BETWEEN TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 DAY) AND CURRENT_TIMESTAMP() AND reservation_id = "RESERVATION_ID" GROUP BY period_start, state) AS t1 JOIN ( SELECT period_start, state, COUNT(DISTINCT job_id) AS job_count FROM `PROJECT_ID.REGION_ID`.INFORMATION_SCHEMA.JOBS_TIMELINE WHERE state = "PENDING" AND period_start BETWEEN TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 DAY) AND CURRENT_TIMESTAMP() AND reservation_id = "RESERVATION_ID" GROUP BY period_start, state HAVING COUNT(DISTINCT job_id) > 0 ) AS t2 ON t1.period_start = t2.period_start WHERE t1.state = "RUNNING";
Substitua o seguinte:
PROJECT_ID
: o nome do projeto no qual executou as consultasREGION_ID
: a localização onde as consultas foram processadasRESERVATION_ID
: o nome da reserva na qual as consultas estão a ser executadas
Pode monitorizar o comprimento da fila de consultas para a sua reserva através dos gráficos de recursos administrativos do BigQuery e selecionar o gráfico Execução simultânea de tarefas com a métrica Pendente.
Também pode monitorizar o comprimento da fila no Cloud Monitoring vendo a métrica job count e filtrando pelo número de trabalhos num estado pendente.
Limitações
- Cada projeto a pedido pode colocar em fila até 1000 consultas interativas e 20 000 consultas em lote em simultâneo. As consultas que excedem este limite devolvem um erro de quota. Não pode pedir um aumento destes limites.
- Numa reserva, cada projeto atribuído a essa reserva pode colocar em fila de espera até 1000 consultas interativas e 20 000 consultas em lote em simultâneo. As consultas que excedem este limite devolvem um erro de quota. Não pode pedir um aumento destes limites.
- Por predefinição, as tarefas de consulta que não tenham iniciado a execução expiram após 6 horas para consultas interativas e 24 horas para consultas em lote.
- Não pode definir o objetivo de simultaneidade máxima para consultas executadas num projeto a pedido.
- Não pode definir o objetivo de concorrência máxima para consultas executadas com uma reserva da edição Standard. Para mais informações sobre as edições, consulte o artigo Introdução às edições do BigQuery.
O que se segue?
- Saiba como diagnosticar e resolver erros de limite da fila de consultas.