Visão geral do otimizador de consultas

Nesta página, descrevemos o otimizador de consultas do Spanner e os benefícios dele.

Visão geral

O otimizador consulta SQL do Spanner converte uma instrução SQL declarativa, que descreve quais dados a consulta quer, em um plano de execução imperativo, que descreve uma maneira de conseguir esses dados com precisão. O processo de transformar uma declaração declarativa em um plano de execução de consulta envolve realizar 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.

Outra função importante do otimizador é produzir um plano de execução eficiente.

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

O otimizador do Spanner usa uma combinação de heurísticas bem estabelecidas e otimização com base no custo para criar planos eficientes. Algumas heurísticas são muito simples, como "executar filtros em máquinas remotas em vez de 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 forma eficaz usando essas regras fixas. Portanto, O otimizador do Spanner também toma decisões com base em um custo das alternativas. Essas estimativas de custo são calculadas usando a estrutura de consulta, o esquema do banco de dados e as estimativas do volume de dados que será produzido por fragmentos da consulta. Por exemplo, o Spanner vai estimar quantas linhas da tabela "Songs" qualificam o filtro SongGenre = "Country", se esse filtro aparece em uma consulta. Para ajudar o cálculo dessas estimativas, o Spanner coleta periodicamente estatísticas para caracterizar a distribuição dos dados em um banco de dados.

Além disso, o Spanner otimiza a execução de consultas automaticamente determinar se um método de processamento orientado por linhas ou colunas deve ser usado para na consulta. Para mais informações, consulte Verificações do Optimize.

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

Controle de versão do otimizador de consultas

Com o tempo, o otimizador de consultas do Spanner vai evoluir, ampliando de opções no plano de execução de consulta e melhorar a precisão as estimativas que embasam essas escolhas, resultando em consultas mais eficientes planos de execução.

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

Pacotes de estatísticas do otimizador de consultas

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

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.

Criar um novo pacote de estatísticas

O Spanner gera novos pacotes de estatísticas automaticamente a cada três dias. Para criar um novo pacote de estatísticas manualmente, use o método Instrução DDL do GoogleSQL ANALYZE ou o PostgreSQL ANALYZE.

Após alterações significativas nos dados ou no esquema de seu banco de dados, a construção de um novo do pacote de estatísticas podem melhorar o desempenho da consulta. Como prática recomendada, construa um novo pacote de estatísticas se ocorrer o seguinte:

  • O banco de dados processa uma grande quantidade de inserções, atualizações ou exclusões.
  • Você adiciona um novo índice ao banco de dados.
  • Você adiciona uma nova coluna a uma tabela.

Como executar uma instrução DDL ANALYZE atualiza seu esquema e inicia uma operação de longa duração.

Depois que o Spanner termina de executar a instrução, leva até 10 minutos para o otimizador de consultas considerar um novo pacote de estatísticas na sua planejamento de consultas.

Coleta de lixo de pacotes de estatísticas

Os pacotes de estatísticas no Spanner são mantidos por um período de 30 dias, da criação, ficando sujeitos à coleta de lixo.

O INFORMATION_SCHEMA.SPANNER_STATISTICS integrado do 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 o pacote de estatísticas foi coletado da lixeira. É possível alterar o valor ALLOW_GC usando o GoogleSQL ALTER STATISTICS ou o PostgreSQL Instrução DDL ALTER STATISTICS.

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

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.

O Spanner cria um novo pacote de estatísticas regularmente e o mantém por 30 dias por padrão. Assim, uma pequena amostra dos valores excluídos o banco de dados pode ser retido por mais 30 dias em histogramas estatísticos. Pacotes de estatísticas fixados com a opção de banco de dados optimizer_statistics_package ou pacotes com a 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 mais longo. Além disso, o conteúdo de pacotes de estatísticas está incluído em backups de bancos 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 é menor que 100. MB e são contabilizados nos custos totais de armazenamento.

A seguir