Sobre o otimizador de consultas

O que é um otimizador de consultas?

O otimizador de consultas SQL do Cloud Spanner converte uma instrução SQL declarativa que descreve quais dados a consulta quer, em um plano de execução imprescindível, que descreve uma maneira de obter esses dados com precisão. O processo de transformação de uma instrução declarativa em um plano de execução de consulta envolve a realização de transformações em estruturas de árvore usadas para representar a consulta. O otimizador, no processo de produção de um plano de execução, mantém o significado lógico da consulta SQL original para que as linhas corretas sejam retornadas.

Outro papel importante do otimizador é produzir um plano de execução eficiente.

Como o otimizador do Cloud Spanner produz planos de execução eficientes?

O otimizador do Cloud Spanner usa uma combinação de heurística bem estabelecida e otimização baseada em custos para produzir planos eficientes. Algumas heurísticas são muito simples, como "executar filtros em máquinas remotas em vez de extrair dados para a máquina local". Outras heurísticas são mais complexas, mas ainda incorporam o princípio de mover a lógica que reduz o volume de dados mais perto dos dados. Esse princípio é particularmente importante em um sistema que fragmenta dados em várias máquinas.

Nem todas as decisões de execução podem ser tomadas de maneira eficaz usando essas regras fixas. Portanto, o otimizador do Cloud Spanner também toma decisões com base em um custo estimado de alternativas. Essas estimativas de custo são calculadas usando a estrutura da consulta, o esquema do banco de dados e as estimativas do volume de dados que será produzido pelos fragmentos da consulta. Por exemplo, o Cloud Spanner estimará quantas linhas da tabela"Músicas"qualificarão o filtro SongGenre = "Country" se esse filtro aparecer em uma consulta. Para ajudar no cálculo dessas estimativas, o Cloud Spanner coleta periodicamente estatísticas para caracterizar a distribuição dos dados em um banco de dados.

Para saber mais sobre planos de execução de consulta e como eles são usados pelo Cloud Spanner para executar consultas em um ambiente distribuído, consulte Planos de execução de consulta.

Controle de versão do otimizador de consultas

Com o passar do tempo, o otimizador de consultas do Cloud Spanner evoluirá, ampliando o conjunto de opções no plano de execução da consulta e melhorando a precisão das estimativas que informam essas escolhas, levando a planos de execução de consultas mais eficientes.

O Cloud Spanner lança atualizações do otimizador como novas versões do otimizador de consultas para melhorar a eficiência dos planos de execução de consulta. Para saber mais sobre as diferentes versões, consulte Versões do otimizador de consultas do Cloud Spanner.

Pacotes de estatísticas do otimizador de consultas

O Cloud Spanner mantém estatísticas sobre a distribuição de dados de colunas da tabela para ajudar a estimar quantas linhas serão produzidas por uma consulta. O otimizador de consultas usa essas estimativas para escolher o melhor plano de execução. Essas estatísticas são atualizadas periodicamente pelo Cloud Spanner. Como as estatísticas são usadas para escolher planos de execução de consulta, quando as estatísticas são atualizadas, é possível que o Cloud Spanner mude o plano de consulta usado.

Por padrão, os bancos de dados automaticamente usam o pacote de estatísticas gerado mais recentemente. É possível fixar seu banco de dados a uma versão anterior do pacote de estatísticas. Você também tem a opção de executar consultas individuais com um pacote de estatísticas que não seja o mais recente.

Coleta de lixo de pacotes de estatísticas

O Cloud Spanner atualiza os pacotes de estatísticas a cada três dias. Os pacotes mais antigos são mantidos por um período de 30 dias a partir da criação. Depois disso, ficam sujeitos à coleta de lixo.

A tabela integrada INFORMATION_SCHEMA.SPANNER_STATISTICS do Cloud Spanner contém uma lista de pacotes de estatísticas disponíveis. Cada linha da tabela lista um pacote de estatísticas por nome, e o nome contém o carimbo de data/hora de criação do pacote. Cada entrada também contém um campo chamado ALLOW_GC, que define se um pacote pode ser coletado com lixo ou não.

É possível fixar todo o banco de dados em qualquer um dos pacotes listados nessa tabela. O pacote de estatísticas fixadas não será coletado como lixo e o valor de ALLOW_GC será ignorado, desde que o banco de dados esteja fixado nesse pacote. Para usar um pacote de estatísticas específico em uma consulta individual, ele precisa ser listado com ALLOW_GC=FALSE ou fixado. Isso evita que as consultas falhem após a coleta de lixo do pacote de estatísticas. O valor de ALLOW_GC pode ser alterado usando a instrução DDL ALTER STATISTICS.

Retenção de pacotes e informações de identificação pessoal (PIIs)

Um pacote de estatísticas contém histogramas dos dados da coluna, de acordo com a prática padrão do setor. Isso ajuda o otimizador de consultas a selecionar os planos de consulta ideais. O histograma é construído usando uma pequena amostra de valores. Esse pequeno conjunto de dados pode conter PIIs.

Por padrão, o Cloud Spanner cria um novo pacote de estatísticas e o retém por 30 dias. Assim, uma pequena amostra de valores excluídos do banco de dados pode ser mantida por mais 30 dias em histogramas de estatísticas. Pacotes de estatísticas fixados com a opção de banco de dados optimizer_statistics_package ou pacotes com opção ALLOW_GC=FALSE não serão coletados como lixo. Os histogramas nesses pacotes podem conter valores excluídos do banco de dados por um período maior. Além disso, o conteúdo dos pacotes de estatísticas é incluído nos backups do banco de dados.

As estatísticas do otimizador são armazenadas criptografadas da mesma forma que os dados do usuário.

A quantidade total de armazenamento necessária para esses pacotes geralmente é inferior a 100 MB e é contabilizada nos custos totais de armazenamento.

A seguir