O visualizador do plano de consulta permite-lhe compreender rapidamente a estrutura do plano de consulta escolhido pelo Spanner para avaliar uma consulta. Este guia descreve como pode usar um plano de consulta para ajudar a compreender a execução das suas consultas.
Antes de começar
Para se familiarizar com as partes da Google Cloud interface do utilizador da consola mencionadas neste guia, leia o seguinte:
Execute uma consulta na Google Cloud consola
- Aceda à página Instances do Spanner na Google Cloud consola.
-
Selecione o nome da instância que contém a base de dados que quer consultar.
Google Cloud A consola apresenta a página Vista geral da instância.
-
Selecione o nome da base de dados que quer consultar.
AGoogle Cloud consola apresenta a página Vista geral da base de dados.
-
No menu lateral, clique em Spanner Studio.
AGoogle Cloud consola apresenta a página Spanner Studio da base de dados.
- Introduza a consulta SQL no painel do editor.
-
Clique em Executar.
O Spanner executa a consulta.
- Clique no separador Explicação para ver a visualização do plano de consulta.
Uma visita guiada ao editor de consultas
A página do Spanner Studio oferece separadores de consultas que lhe permitem escrever ou colar consultas SQL e declarações DML, executá-las na sua base de dados e ver os respetivos resultados e planos de execução de consultas. Os componentes principais da página do Spanner Studio estão numerados na captura de ecrã seguinte.

- A barra de separadores mostra os separadores de consultas que tem abertos. Para criar um novo separador, clique em Novo separador.
A barra de separadores também fornece uma lista de Modelos de consultas que pode usar para colar consultas que fornecem estatísticas sobre consultas de bases de dados, transações, leituras e muito mais, conforme descrito na Vista geral das ferramentas de introspeção.
- A barra de comandos do editor oferece as seguintes opções:
- O comando Executar executa as declarações introduzidas no painel de edição, produzindo resultados da consulta no separador Resultados e planos de execução de consultas no separador Explicação. Altere o comportamento predefinido através do menu pendente para produzir Apenas resultados ou Apenas explicação.
Realçar algo no editor altera o comando Executar para Executar selecionado, o que lhe permite executar apenas o que selecionou.
- O comando Limpar consulta elimina todo o texto no editor e limpa os subseparadores Resultados e Explicação.
- O comando Formatar consulta formata as declarações no editor para que sejam mais fáceis de ler.
- O comando Atalhos apresenta o conjunto de atalhos de teclado que pode usar no editor.
- O link Ajuda de consultas SQL abre um separador do navegador para aceder à documentação sobre a sintaxe de consultas SQL.
As consultas são validadas automaticamente sempre que são atualizadas no editor. Se as declarações forem válidas, a barra de comandos do editor apresenta uma marca de verificação de confirmação e a mensagem Válido. Se existirem problemas, é apresentada uma mensagem de erro com detalhes.
- O comando Executar executa as declarações introduzidas no painel de edição, produzindo resultados da consulta no separador Resultados e planos de execução de consultas no separador Explicação. Altere o comportamento predefinido através do menu pendente para produzir Apenas resultados ou Apenas explicação.
- O editor é onde introduz a consulta SQL e as declarações DML.
Estão codificados por cores e os números das linhas são adicionados automaticamente para
declarações de várias linhas.
Se introduzir mais do que uma declaração no editor, tem de usar um ponto e vírgula de terminação após cada declaração, exceto a última.
- O painel inferior de um separador de consulta oferece três subseparadores:
- O subseparador Esquema mostra as tabelas na base de dados e os respetivos esquemas. Use-o como referência rápida ao compor declarações no editor.
- O subseparador Resultados mostra os resultados quando executa as
declarações no editor. Para consultas, mostra uma tabela de resultados e, para declarações DML, como
INSERT
e >UPDATE
, mostra uma mensagem sobre o número de linhas afetadas. - O separador Explicação mostra gráficos visuais dos planos de consulta criados quando executa as declarações no editor.
- Os subseparadores Resultados e Explicação oferecem um seletor de declarações que usa para escolher os resultados ou o plano de consulta da declaração que quer ver.
Veja planos de consultas com amostragem
- Aceda à página Instances do Spanner na Google Cloud consola.
-
Clique no nome da instância com as consultas que quer investigar.
Google Cloud A consola apresenta a página Vista geral da instância.
-
No menu Navegação e no cabeçalho Observabilidade, clique em Estatísticas de consultas.
Google Cloud A consola apresenta a página Estatísticas de consultas da instância.
-
No menu pendente Base de dados, selecione a base de dados com as consultas que quer investigar.
A consolaGoogle Cloud apresenta as informações de carregamento de consultas para a base de dados. A tabela Principais consultas e etiquetas N apresenta a lista das principais consultas e etiquetas de pedidos ordenadas por utilização da CPU.
-
Encontre a consulta com uma utilização elevada da CPU para a qual quer ver planos de consultas com amostragem. Clique no valor FPRINT dessa consulta.
A página Detalhes da consulta mostra um gráfico de Exemplos de planos de consulta para a sua consulta ao longo do tempo. Pode diminuir o zoom até um máximo de sete dias antes da hora atual. Nota: os planos de consulta não são suportados para consultas com partitionTokens obtidos a partir da API PartitionQuery e consultas de DML particionadas.
-
Clique num dos pontos no gráfico para ver um plano de consulta mais antigo e visualizar os passos realizados durante a execução da consulta. Também pode clicar em qualquer operador para ver informações expandidas sobre o mesmo.
Figura 8. Gráfico de amostras do plano de consulta.
Em alguns casos, pode querer ver planos de consultas com amostras e comparar o desempenho de uma consulta ao longo do tempo. Para consultas que consomem mais CPU, o Spanner retém planos de consultas com amostragem durante 30 dias na página Estatísticas de consultas da consola Google Cloud . Para ver planos de consultas com amostragem:
Faça uma visita guiada ao visualizador do plano de consulta
Os componentes principais do visualizador estão anotados na captura de ecrã seguinte e descritos mais detalhadamente. Depois de executar uma consulta num separador de consultas, selecione o separador EXPLICAÇÃO abaixo do editor de consultas para abrir o visualizador do plano de execução de consultas.
O fluxo de dados no diagrama seguinte é de baixo para cima, ou seja, todas as tabelas e índices estão na parte inferior do diagrama e o resultado final está na parte superior.

- A visualização do seu plano pode ser grande, consoante a consulta que executou. Para ocultar e mostrar detalhes, ative/desative o seletor de vista EXPANDED/COMPACT. Pode personalizar a quantidade de informações do plano que vê em qualquer altura através do controlo de zoom.
- A álgebra que explica como o Spanner executa a consulta
é desenhada como um gráfico acíclico, em que cada nó corresponde a um
iterador que consome linhas das respetivas entradas e produz linhas para o respetivo
principal. Um plano de exemplo é apresentado na Figura 9. Clique no diagrama
para ver uma vista expandida de alguns dos detalhes do plano.
Figura 9. Exemplo de plano visual (clique para aumentar). Cada nó, ou cartão, no gráfico representa um iterador e contém as seguintes informações:
- O nome do iterador. Um iterador consome linhas da respetiva entrada e produz linhas.
- Estatísticas de tempo de execução que indicam quantas linhas foram devolvidas, qual foi a latência e quanta CPU foi consumida.
- Disponibilizamos as seguintes indicações visuais para ajudar a identificar potenciais problemas no plano de execução da consulta.
- As barras vermelhas num nó são indicadores visuais da percentagem de latência ou tempo da CPU para este iterador em comparação com o total para a consulta.
- A espessura das linhas que ligam cada nó representa a quantidade de linhas. Quanto mais espessa for a linha, maior é o número de linhas transmitidas ao nó seguinte. O número real de linhas é apresentado em cada cartão e quando passa o ponteiro do rato sobre um conector.
- É apresentado um triângulo de aviso num nó onde foi feita uma análise completa da tabela. Mais detalhes no painel de informações incluem recomendações, como adicionar um índice ou rever a consulta ou o esquema de outras formas, se possível, para evitar uma análise completa.
- Selecione um cartão no plano para ver detalhes no painel de informações à direita (5).
- O minimapa do plano de execução mostra uma vista reduzida do plano completo e é útil para determinar o formato geral do plano de execução e para navegar rapidamente para diferentes partes do plano. Arraste diretamente no minimapa ou clique onde quer focar para aceder a outra parte do plano visual.
Selecione TRANSFERIR JSON para transferir uma versão JSON do plano de execução, o que é útil para a resolução de problemas. Também pode partilhá-lo quando contactar a equipa do Spanner para receber apoio técnico. Guardar o JSON não guarda o resultado da consulta.
Para transferir e guardar uma versão JSON do plano de execução para visualizar mais tarde:
- No Spanner Studio, execute uma consulta.
- Selecione o separador Explicação.
- Clique em TRANSFERIR JSON para transferir a versão JSON do plano de execução.
- Guarde e copie o conteúdo do ficheiro JSON.
- Abra um novo separador do editor de consultas.
- No separador do editor, introduza:
PROTO: CONTENT_OF_JSON
- Clique em Executar.
- Selecione o separador Explicação abaixo do editor de consultas para ver uma representação visual do plano de execução transferido.
- O painel de informações mostra informações contextuais detalhadas sobre o nó selecionado no diagrama do plano de consulta. As informações estão
organizadas nas seguintes categorias.
- As informações do iterador fornecem detalhes, bem como estatísticas de tempo de execução, para o cartão do iterador que selecionou no gráfico.
- O Resumo da consulta fornece detalhes sobre o número de linhas devolvidas e o tempo necessário para executar a consulta. Os operadores proeminentes são aqueles que apresentam uma latência significativa, consomem uma quantidade significativa de CPU em relação a outros operadores e devolvem um número significativo de linhas de dados.
- A cronologia de execução de consultas é um gráfico baseado no tempo que mostra durante quanto tempo cada grupo de máquinas executou a respetiva parte da consulta. Um grupo de máquinas pode não estar necessariamente em execução durante toda a duração do tempo de execução da consulta. Também é possível que um grupo de máquinas tenha sido executado várias vezes durante a execução da consulta, mas a cronologia aqui representa apenas o início da primeira execução e o fim da última execução.
Ajuste uma consulta que apresente um desempenho fraco
Imagine que a sua empresa gere uma base de dados de filmes online que contém informações sobre filmes, como o elenco, as empresas de produção, os detalhes dos filmes e muito mais. O serviço é executado no Spanner, mas tem tido alguns problemas de desempenho ultimamente.
Como programador principal do serviço, é-lhe pedido que investigue estes problemas de desempenho, uma vez que estão a causar classificações baixas para o serviço. Abra a Google Cloud consola, aceda à instância da base de dados e, de seguida, abra o editor de consultas. Introduza a seguinte consulta no editor e execute-a.
SELECT
t.title,
MIN(t.production_year) AS year,
ANY_VALUE(mc.note HAVING MIN t.production_year) AS note
FROM
title AS t
JOIN
movie_companies AS mc
ON
t.id = mc.movie_id
WHERE
t.title LIKE '% the %'
GROUP BY
title;
O resultado da execução desta consulta é apresentado na captura de ecrã seguinte. Formatámos a consulta no editor selecionando FORMATAR CONSULTA. Também existe uma nota na parte superior direita do ecrã a indicar que a consulta é válida.

O separador RESULTADOS abaixo do editor de consultas mostra que a consulta foi concluída em pouco mais de dois minutos. Decide analisar mais detalhadamente a consulta para ver se é eficiente.
Analise consultas lentas com o visualizador do plano de consulta
Neste momento, sabemos que a consulta no passo anterior demora mais de dois minutos, mas não sabemos se a consulta é tão eficiente quanto possível e, por isso, se esta duração é esperada.
Selecione o separador EXPLICAÇÃO imediatamente abaixo do editor de consultas para ver uma representação visual do plano de execução que o Spanner criou para executar a consulta e devolver resultados.
O plano apresentado na captura de ecrã seguinte é relativamente grande, mas, mesmo a este nível de zoom, pode fazer as seguintes observações.
Com base no Resumo da consulta no painel de informações à direita, ficamos a saber que foram analisadas quase 3 milhões de linhas e, em última análise, foram devolvidas menos de 64 mil.
Também podemos ver no painel Linha cronológica de execução de consultas que 4 grupos de máquinas estiveram envolvidos na consulta. Um grupo de máquinas é responsável pela execução de uma parte da consulta. Os operadores podem ser executados numa ou mais máquinas. A seleção de um grupo de máquinas na cronologia realça no plano visual a parte da consulta que foi executada nesse grupo.

Devido a estes fatores, decide que é possível melhorar o desempenho alterando a junção de uma junção de aplicação, que o Spanner escolheu por predefinição, para uma junção hash.
Melhore a consulta
Para melhorar o desempenho da consulta, usa uma sugestão de junção para alterar o método de junção para uma junção hash. Esta implementação de junção executa o processamento baseado em conjuntos.
Aqui está a consulta atualizada:
SELECT
t.title,
MIN(t.production_year) AS year,
ANY_VALUE(mc.note HAVING MIN t.production_year) AS note
FROM
title AS t
JOIN
@{join_method=hash_join} movie_companies AS mc
ON
t.id = mc.movie_id
WHERE
t.title LIKE '% the %'
GROUP BY
title;
A captura de ecrã seguinte ilustra a consulta atualizada. Conforme mostrado na captura de ecrã, a consulta foi concluída em menos de 5 segundos, uma melhoria significativa em relação ao tempo de execução de 120 segundos antes desta alteração.

Examine o novo plano visual, apresentado no diagrama seguinte, para ver o que nos diz sobre esta melhoria.

Imediatamente, nota algumas diferenças:
Apenas um grupo de máquinas esteve envolvido na execução desta consulta.
O número de agregações foi reduzido drasticamente.
Conclusão
Neste cenário, executámos uma consulta lenta e analisámos o respetivo plano visual para procurar ineficiências. Segue-se um resumo das consultas e dos planos antes e depois de terem sido feitas alterações. Cada separador mostra a consulta que foi executada e uma vista compacta da visualização completa do plano de execução da consulta.
Antes
SELECT
t.title,
MIN(t.production_year) AS year,
ANY_VALUE(mc.note
HAVING
MIN t.production_year) AS note
FROM
title AS t
JOIN
movie_companies AS mc
ON
t.id = mc.movie_id
WHERE
t.title LIKE '% the %'
GROUP BY
title;

Depois
SELECT
t.title,
MIN(t.production_year) AS year,
ANY_VALUE(mc.note
HAVING
MIN t.production_year) AS note
FROM
title AS t
JOIN
@{join_method=hash_join} movie_companies AS mc
ON
t.id = mc.movie_id
WHERE
t.title LIKE '% the %'
GROUP BY
title;

Um indicador de que algo podia ser melhorado neste cenário era o facto de uma grande proporção das linhas da tabela title qualificar o filtro LIKE
'% the %'
. A procura noutra tabela com tantas linhas é provavelmente dispendiosa. A alteração da nossa implementação de junção para uma junção hash melhorou significativamente o desempenho.
O que se segue?
Para ver a referência completa do plano de consulta, consulte os planos de execução de consultas.
Para ver a referência completa dos operadores, consulte os operadores de execução de consultas.