Vamos falar sobre como o GaussDB AP executa SQL

Este artigo foi compartilhado pela Huawei Cloud Community " How GaussDB AP Executes SQL ", autor: yd_270088468.

Prefácio

Apresente como os vários componentes do GaussDB AP funcionam juntos, com foco no mecanismo SQL.

1. Componentes do mecanismo SQL e ciclo de vida SQL

cke_131.png

Analisador: Módulo de análise lexical/gramatical. A análise lexical analisará cada palavra da string SQL como entrada para análise de sintaxe. A análise de sintaxe pode ser imaginada como uma "expressão regular", mas é muito mais complexa que uma expressão regular. Ela define as regras de sintaxe de todos os tipos SQL, bem como a precedência e associatividade dos operadores. Após a conclusão da análise sintática, uma árvore de análise será gerada como entrada do módulo de análise semântica. Por exemplo, um SQL é SELECT id, data FROM tbl_a WHERE id < 300 ORDER by data;, a árvore de análise gerada pela análise de sintaxe é a seguinte:

cke_132.png

Analisador: Módulo de análise semântica. A análise semântica acessará os objetos do banco de dados, verificará se a tabela existe, se as colunas são legais e converterá tabelas, classificação de colunas, colunas de projeção, etc. em IDs de objetos internos. Além disso, também verificará se a semântica SQL está correta e legal.Por exemplo, a função Aggregate não é legal na cláusula where. Após a análise semântica, a Árvore de Análise será transformada em uma Árvore de Consulta, que será utilizada como entrada do módulo de reescrita de consultas. A estrutura da Query Tree é um pouco semelhante à Parse Tree, mas é mais rica em conteúdo, incluindo a Query Tree salvando informações do objeto dentro do banco de dados e adicionando mais algumas tags Flag. A árvore de consulta gerada pela análise semântica é a seguinte:

cke_133.png

Rewriter: módulo de reescrita de consulta. O módulo de reescrita de consulta reescreve a consulta de acordo com regras definidas pelo usuário, o que na verdade modifica ou substitui os membros na Árvore de Consulta. O processo de reescrita é o seguinte:

cke_134.png

Planejador: módulo otimizador. A entrada do otimizador é a Query Tree, e a saída da Plan Tree é usada para orientar a execução do executor, como como ingressar, como verificar os dados, como classificar, etc.

cke_135.png

Executor: módulo executor. De acordo com a saída do Plan Tree do otimizador, ele é inicializado e executado, e a interface do mecanismo de armazenamento será chamada durante a execução, que não é expandida aqui.

2. Arquitetura geral de execução SQL

cke_136.png

Etapa 1: a empresa envia SQL para CN por meio do ELB, e o SQL pode ser DDL, DML ou DCL.

Etapa 2: CN avalia o tipo SQL. Se o tipo SQL for DDL/DCL, ele não precisa gerar um plano, mas envia o SQL para outros CNs e todos os DNs, e executa em todos os CNs/DNs. Se o tipo SQL for DML, para aqueles que não necessitam utilizar o operador stream (pode ser dividido em 3 subcategorias), o SQL será enviado diretamente para cada DN para execução. Para aqueles que necessitam utilizar o operador stream, um plano será gerado e enviado ao DN para execução.

Etapa 3: Quando o DN executa o DML, ele pode obter dados de outros DNs. O DWS fornece três operadores de fluxo (Redistribuir/Broadcast/Gather) para reduzir o fluxo de dados entre os nós do DN.

Etapa 4: DN retorna o conjunto de resultados para CN para resumo.

Etapa 5: CN retorna os resultados agregados ao negócio.

3. Como o DDL interage no CN/DN

3.1 O caso de DDL único

cke_137.png

3.2 A situação de DDL simultâneo

Para evitar deadlock causado por DDL simultâneo, enable_parallel_ddl é habilitado por padrão, o que controla o DDL emitido de todos os CNs para usar o mesmo CN como ponto de partida para execução.

cke_138.png

Descrição do diagrama de sequência de mensagens

Premissa: CN 1, CN 2 e CN 3 recebem, cada um, uma solicitação para uma operação DDL no teste de tabela. CN 1 é o primeiro nó selecionado para executar DDL.

T1: CN 2 não é o primeiro nó a executar a operação DDL, então CN 2 envia o comando Comando 2 para o primeiro nó executado CN 1 e então aguarda a resposta de CN 1;

T2: CN 3 não é o primeiro nó a executar a operação DDL, então CN 3 envia o comando Comando 3 para o primeiro nó CN 1 executar e então aguarda a resposta do CN1;

T3: CN 1 é o primeiro nó a realizar operações DDL, portanto é executado de acordo com a lógica original da linha de base, ou seja, executado localmente primeiro;

T4: CN 1 executa o Comando 2 e adquire o teste de bloqueio na mesa. Após a execução do Comando 2 ser concluída, o CN 1 informa ao CN2: O Comando 2 foi concluído acima de mim. Neste momento, o Comando 1 e o Comando 3 não conseguem obter o bloqueio e estão em estado de espera.

T5: Após receber a resposta do CN 1 de que o Comando 2 foi executado, o CN 2 envia o comando 2 para o CN 3 e aguarda a resposta do CN 3.

T6: CN 3 executa o comando 2 e responde o resultado da execução ao CN 2;

T7: CN 2 envia o comando 2 para DN1, DN2 e DN3, solicitando que executem localmente e aguardando suas respostas;

T8: DN1, DN2 e DN3 executam o Comando 2 localmente respectivamente e respondem ao resultado da execução do CN 2;

T9: CN 2 executa o Comando 2 localmente e o envia após sucesso. Neste ponto, todos os CNs e DNs no cluster são desbloqueados e o Comando 2 é executado.

T10: CN 1 executa o Comando 3 e adquire o teste de bloqueio na mesa. Após a execução do Comando 3 ser concluída, o CN 1 informa ao CN3: O Comando 3 foi concluído para mim. Neste ponto, o Comando 1 não consegue obter o bloqueio e está em estado de espera.

T11: CN 3 envia o comando 3 para CN 2 após receber a resposta de que a execução do Comando 3 do CN 1 foi concluída e aguarda a resposta do CN 2.

T12: CN 2 executa o comando 3 e responde o resultado da execução ao CN 3;

T13: CN 3 envia o comando 3 para DN1, DN2 e DN3, solicitando que executem localmente e aguardem suas respostas;

T14: DN1, DN2 e DN3 executam respectivamente o Comando 3 localmente e respondem com o resultado da execução do CN 3;

T15: CN 3 executa o Comando 3 localmente e o envia após sucesso. Neste ponto, todos os CNs e DNs no cluster são desbloqueados e o Comando 3 é executado.

T16: CN 1 envia Comando 1 para CN2 e CN3 e aguarda suas respostas;

T17: CN2 e CN3 executam respectivamente o Comando 1 localmente e respondem o resultado da execução ao CN 1;

T18: CN 1 envia o comando 1 para DN1, DN2, DN3, solicitando que executem localmente e aguardando suas respostas;

T19: DN1, DN2 e DN3 executam respectivamente o Comando 1 localmente e respondem ao resultado da execução do CN 1;

T20: CN 1 executa o Comando 1 localmente e o envia após sucesso. Até agora, todos os CNs e DNs no cluster estão bloqueados e o Comando 3 é executado.

Como pode ser visto na implementação acima, a ideia central é serializar operações DDL simultâneas em vários CNs, ou seja, especificar um CN a ser executado primeiro, e todo DDL deve ser executado neste CN antes de poder ser executado em outros CNs. .executado no nó. Neste caso, neste CN designado, as operações DDL são seriais, e o DDL que não consegue obter o bloqueio irá esperar, mas não haverá mais uma situação de deadlock onde o bloqueio não possa ser obtido.

4. Geração do plano de execução DML

4.1 Modelo CBO

CBO: A otimização baseada em custos também é um "otimizador baseado em custos". Comparado com o RBO (otimização baseada em regras), o CBO é muito sensível aos dados e tem um plano de execução mais flexível. Quando a quantidade de dados muda, o CBO muitas vezes pode gerar melhores resultados de otimização plano de execução.

O processo básico de otimização do CBO: O mecanismo de busca usa regras de conversão para realizar a conversão (lógica/física) no plano de execução lógica de entrada e constrói o espaço de busca do plano de execução. Depois disso, utilize o modelo de custo para estimar o custo de cada plano de execução no espaço de busca e selecione o plano de execução física com o menor custo. O processo de estimativa de custos é inseparável da estimativa de cardinalidade: utiliza as informações estatísticas de cada tabela e coluna para estimar o número de linhas de entrada, taxa de seleção e outras informações de cada operador, e fornece o modelo de custo do operador para estimar a consulta plano. custo.

O otimizador DWS é um otimizador baseado em custos (CBO). Ele pode construir um espaço de pesquisa para cada instrução SQL e estimar a execução do plano da máquina de execução no espaço de pesquisa com base em estatísticas de dados, estimativa de cardinalidade e modelos de custo do operador. custo necessário (CPU/MEM/IO/NET) e, finalmente, o plano de execução com o menor custo é selecionado como método de execução específico do SQL.

4.2 Espaço de pesquisa

Use o método Cascade (programação dinâmica)/GEQO (gene genético) para realizar a busca do plano. Cálculos precisos podem ser obtidos através do algoritmo Cascade, mas a complexidade do tempo é alta e é adequado para situações onde há poucas conexões de tabelas. GEQO é um método de cálculo impreciso e adequado para situações onde existem muitas tabelas.

4.3 Estatísticas

Incluindo o número de linhas da tabela lógica, o número de valores distintos (NDV) da coluna, informações de valor nulo da coluna, etc.

4.4 Estimativa de cardinalidade

A estimativa de cardinalidade estima o número de linhas ou cardinalidade dos resultados intermediários de cada operador, como o número de linhas de saída unidas, o número de grupos gerados por Agg, etc.

4.5 Custo do Operador

Para operadoras do mesmo tipo, calcula-se o consumo (custo) de implantação de todas as operadoras, selecionando-se aquela com menor custo.

Entrada: o tamanho das duas tabelas, as características dos dados da coluna Join, a ordem e o tamanho da memória disponível work_mem;

Saída: o custo da operadora (dimensões que consomem tempo)

4.6 Planejamento distribuído

número de série

Classificação

efeito

Princípio de execução

Cena aplicável

1

CN emite declaração

Gerar um plano para uma instrução pushdown completa (plano FQS)

Cada DN gera um plano de execução de acordo com a instrução push-down, executa-o e os resultados da execução são resumidos no CN (FQS, Fast Query Shipping)

Não há interação de dados quando cada DN é executado, como no cenário de varredura de tabela base

2

CN emite declaração

Gere um plano distribuído para a instrução send (plano de empilhamento parcial)

O CN envia parte da instrução original (geralmente uma varredura de tabela base) para o DN. Cada DN gera um plano de execução com base na instrução enviada. Após a execução, o resultado é enviado ao CN e o CN executa o plano restante.

Os cenários extremos de 1, 3 e 4 não podem ser satisfeitos e o desempenho é muito fraco. Os recursos que atualmente não suportam pushdown incluem principalmente: tipo de dados de registro, função volátil, etc.

3

CN emite declaração

Gerar plano leve CN

Gerar plano de execução e retornar resultados do DN

Apenas um único DN executa a instrução e o resultado do DN é o resultado final do retorno.

4

Plano de geração CN

Gere um plano distribuído (plano Stream) para entregar o Plano

O CN gera um plano baseado na instrução original e o envia ao DN para execução. Há interação de dados (operador Stream) durante a execução de cada DN.

Há interação de dados durante a execução de cada DN e instruções complexas em cenários de AP.

Os três primeiros planos são todos para a CN emitir declarações para o DN. O quarto plano é para a CN gerar um plano e entregá-lo ao DN. O quarto plano também é chamado de plano de fluxo e é o plano mais comumente usado.

Por que existe um plano para emitir declarações?

O CN gera um plano de execução, que consome mais recursos da CPU, e o plano é muito maior que a instrução original. A sobrecarga de emissão de instruções para CN e transmissão de rede é muito menor.

Extra!

cke_41127.jpeg

A Huawei realizará o 8º HUAWEI CONNECT 2023 no Shanghai World Expo Exhibition Hall e no Shanghai World Expo Center de 20 a 22 de setembro de 2023. Com o tema "Acelerando a Inteligência da Indústria", esta conferência convida líderes de pensamento, elites empresariais, especialistas técnicos, parceiros, desenvolvedores e outros colegas da indústria para discutir como acelerar a inteligência da indústria a partir dos aspectos de negócios, indústria, ecologia e outros aspectos.

Sinceramente, convidamos você a visitar o site, compartilhar as oportunidades e desafios da inteligência, discutir as principais medidas da inteligência e experimentar a inovação e aplicação de tecnologia inteligente. você pode:

  • Em mais de 100 discursos, cúpulas e fóruns, as opiniões sobre a aceleração da inteligência do setor colidiram
  • Visite a área de exposição de 17.000 metros quadrados e conheça de perto a inovação e a aplicação de tecnologia inteligente na indústria
  • Encontre-se pessoalmente com especialistas técnicos para aprender sobre as mais recentes soluções, ferramentas de desenvolvimento e práticas práticas
  • Encontre oportunidades de negócios com clientes e parceiros

Obrigado pelo seu apoio e confiança de sempre, e esperamos encontrá-lo em Xangai.

Site oficial da conferência: https://www.huawei.com/cn/events/huaweiconnect

Bem-vindo a seguir a conta pública "Huawei Cloud Developer Alliance" para obter a agenda da conferência, atividades interessantes e informações de ponta.

Clique para seguir e aprender sobre as novas tecnologias da Huawei Cloud pela primeira vez~

A versão web do Windows 12 deepin-IDE compilado por alunos do ensino médio foi oficialmente revelada. É conhecido como QQ "verdadeiramente desenvolvido de forma independente" e alcançou "atualizações simultâneas de três terminais", e a arquitetura NT subjacente é baseada no Electron QQ para Linux lançou oficialmente 3.2.0 "Pai de Hongmeng" Wang Chenglu : O sistema de versão para PC Hongmeng será lançado no próximo ano para desafiar o ChatGPT. Esses 8 produtos domésticos de modelo grande de IA GitUI v0.24.0 são lançados. O papel de parede padrão do Ubuntu 23.10, um Git terminal escrito em Rust é revelado. O "Tauren" no labirinto. JetBrains anuncia o roteiro do WebStorm 2023.3 na China. Ecossistema Human Java, Solon v2.5.3 lançado
{{o.nome}}
{{m.nome}}

Acho que você gosta

Origin my.oschina.net/u/4526289/blog/10108627
Recomendado
Clasificación