2024 Postgres Conference Conference丨Um artigo explica em detalhes a essência do discurso informativo de Tuoshupai

De 17 a 19 de abril, a Postgres Conference 2024, uma das maiores conferências PostgreSQL do mundo, foi realizada em San Jose, EUA. Esta conferência incluiu quatro temas: Ops, Dev, Essentials e Google Cloud. banco de dados foram lançados tópicos como gerenciamento e aplicação, exemplos de usuários e experiência, e palestrantes seniores do Google, AWS, EDB, Yugabyte, DBeaver e outras empresas foram convidados a participar da conferência. Com a sua forte influência na comunidade tecnológica internacional, Tuoshupai foi convidado a participar neste evento como patrocinador da conferência e proferir um discurso técnico.

Na conferência, o especialista técnico do PieCloudDB, Richard Guo, como novo colaborador do PostgreSQL, foi convidado a fazer um discurso técnico "Uma introdução de alto nível ao planejador de consultas no PostgreSQL, combinando a experiência de construção do otimizador de banco de dados PieCloudDB". Otimizador PostgreSQL da perspectiva do desenvolvedor. Como funciona e o processo de conversão de uma árvore de consulta em uma árvore de plano são apresentados em detalhes. O discurso de Richard recebeu feedback positivo do público e levou a uma interação e comunicação profundas.

Em um sistema de gerenciamento de banco de dados (SGBD), o processamento de consultas SQL é um processo complexo e crítico. Para PostgreSQL, uma instrução SQL precisa passar pelas cinco etapas principais a seguir, desde o recebimento até a execução:

  • Analisador: responsável por verificar erros de sintaxe e gerar uma árvore de analisador;
  • Análise (Analyzer): Realiza análise semântica com base na árvore de análise e gera uma árvore de consulta;
  • Reescritor: Reescrever a árvore de consulta de acordo com as regras existentes no sistema;
  • Planejamento/otimização (Planner): Gerar uma árvore de planejamento com maior eficiência de execução com base na árvore de consulta;
  • Executor: Acesse tabelas e índices na ordem da árvore do plano e execute a consulta correspondente.

A mesma instrução de consulta geralmente pode ser executada de várias maneiras. Como um componente importante do banco de dados, a função do otimizador de consulta é encontrar o plano de consulta com o menor custo de cada modo de execução possível e convertê-lo em uma árvore de plano executável.

A seguir, focaremos na fase de planejamento/otimização no processamento de consultas PostgreSQL, que também é a fase mais importante e complexa de todo o processo. O processo é geralmente dividido em quatro estágios: estágio de pré-processamento, estágio de otimização de varredura/conexão, estágio de otimização fora da varredura/conexão e estágio de pós-processamento.

1. Estágio de pré-processamento

No estágio inicial da fase de pré-processamento, as consultas são geralmente simplificadas tanto quanto possível, simplificando expressões constantes (funções, booleanas, CASE, etc.) e incorporando funções SQL simples. Ao mesmo tempo, a árvore de junção será simplificada convertendo IN, EXISTS e outros tipos de subconsultas em semi-junções, promovendo subconsultas e eliminando junções externas (convertendo-as em junções internas ou anti-junções).

Além desses métodos, vários métodos de otimização são usados ​​posteriormente no estágio de pré-processamento, incluindo:

  • Distribuir restrições WHERE e JOIN/ON
  • Construir classes de equivalência
  • Reúna informações sobre restrições de pedidos de adesão
  • Elimine conexões inúteis
  • ...

2. Fase de otimização de digitalização/conexão

A fase de otimização de varredura/conexão processa principalmente as partes FROM e WHERE da instrução de consulta e também considera as informações ORDER BY. Esta parte é toda motivada pelo custo.

Este estágio primeiro determina o caminho de varredura para a tabela base, estima o custo do caminho de varredura e, em seguida, usa programação dinâmica e algoritmos genéticos para pesquisar todo o espaço de sequência de conexão e gerar o caminho de conexão. Ao pesquisar o espaço de ordem de conexão, também é necessário considerar as restrições de ordem de conexão causadas por junções externas.

Na programação dinâmica, a busca de conexão ocorrerá da seguinte forma:

  • Primeiro gere um caminho de varredura para cada tabela base
  • Gere caminhos de junção para todas as junções possíveis de duas tabelas
  • Gere caminhos de junção para todas as junções possíveis das três tabelas
  • Gere caminhos de junção para todas as junções possíveis de quatro tabelas
  • ...
  • Até que todas as tabelas base estejam conectadas entre si

No entanto, o custo deste processo é muito alto. Em teoria, existem n ordens de conexão diferentes para a conexão de n tabelas. Portanto, alguns métodos heurísticos são geralmente usados ​​para reduzir o espaço de busca. Para tabelas que não possuem condições de junção, tente não decompor um grande problema em vários subproblemas para reduzir a complexidade.

3. Fase de otimização além da digitalização/conexão

Neste estágio, o otimizador priorizará GROUP BY, agregação, funções de janela e DISTINCT, depois processará operações de coleta (UNION/INTERSECT/EXCEPT) e, finalmente, processará ORDER BY. Cada uma das etapas acima irá gerar um ou mais caminhos. O otimizador irá filtrar esses caminhos com base no custo e adicionar nós LockRows, Limit e ModifyTable aos caminhos filtrados.

4. Estágio de pós-processamento

Nesta fase, o otimizador precisa converter o caminho de menor custo em uma árvore de plano e ajustar alguns detalhes na árvore de plano:

  • Achatar a tabela de intervalo de uma subconsulta
  • Altere as variáveis ​​no nó superior do plano para o formato OUTER_VAR ou INNER_VAR para apontar para a saída do subplano
  • Exclua SubqueryScan, Append, MergeAppend e outros nós desnecessários

Após concluir esta etapa, o otimizador obterá a árvore do plano completa, podendo entregá-la ao executor para execução e, finalmente, obter os resultados da consulta.

Como uma empresa de inovação de alta tecnologia sediada na China, a Tuoshupai tem estado profundamente envolvida na tecnologia e no ecossistema internacional de código aberto através de contribuições de código, palestras, patrocínio e participação em conferências, cooperação ecológica e outras formas nos últimos anos. No futuro, Tuoshupai continuará a alargar os seus horizontes internacionais, a integrar-se ativamente na onda de inovação tecnológica global, a expandir a sua influência internacional e a construir uma empresa internacional orientada para a tecnologia.

Decidi desistir do código aberto Hongmeng Wang Chenglu, o pai do código aberto Hongmeng: Hongmeng de código aberto é o único evento de software industrial de inovação arquitetônica na área de software básico na China - o OGG 1.0 é lançado, a Huawei contribui com todo o código-fonte. Google Reader é morto pela "montanha de merda de código" Fedora Linux 40 é lançado oficialmente Ex-desenvolvedor da Microsoft: o desempenho do Windows 11 é "ridiculamente ruim" Ma Huateng e Zhou Hongyi apertam as mãos para "eliminar rancores" Empresas de jogos conhecidas emitiram novos regulamentos : os presentes de casamento dos funcionários não devem exceder 100.000 yuans Ubuntu 24.04 LTS lançado oficialmente Pinduoduo foi condenado por concorrência desleal Compensação de 5 milhões de yuans
{{o.nome}}
{{m.nome}}

Acho que você gosta

Origin my.oschina.net/u/5944765/blog/11059181
Recomendado
Clasificación