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