Uma abordagem geral dos principais componentes do Query Executor, desde os contextos de execução até os mecanismo internos de paralelização.
Será apresentada uma abordagem geral sobre a transição do plano lógico de uma consulta para a execução física, envolvendo a alocação de estruturas internas, a passagem de tuplas pelo encadeamento de operadores, a avaliação de expressões e o funcionamento do paralelismo intra-consulta. Primeiramente, serão descritos aspectos do ciclo de vida completo de uma consulta dentro do executor, como a passagem recursiva pelos nós da árvore de execução, coleta de métricas de instrumentação e liberação de recursos. Em seguida, será apresentado o modelo "pull" e o fluxo de tuplas, no qual cada operador só produz tuplas quando solicitado pelo operador imediatamente acima, permitindo um pipeline entre operadores sem materializar conjuntos intermediários em disco. Também será discutido como os principais tipos de nós (Scans, Joins, Aggregates, Sorts e Limit) implementam essa chamada em cadeia e onde cada um consome recursos. Em seguida, abordaremos a avaliação de expressões e como filtragens, projeções e funções definidas pelo usuário são representadas por árvores de expressão, que são então interpretadas pelo executor. Finalmente, é apresentado o paralelismo intra-consulta, abordando a criação de workers adicionais e discutido os critérios utilizados pelo otimizador (custo total, seletividade, tamanho de dados) para decidir pela paralização ou não.
Entendendo o Funcionamento do Query Executor
Barbara Leidens
EnterpriseDB
Uma abordagem geral dos principais componentes do Query Executor, desde os contextos de execução até os mecanismo internos de paralelização.
Será apresentada uma abordagem geral sobre a transição do plano lógico de uma consulta para a execução física, envolvendo a alocação de estruturas internas, a passagem de tuplas pelo encadeamento de operadores, a avaliação de expressões e o funcionamento do paralelismo intra-consulta. Primeiramente, serão descritos aspectos do ciclo de vida completo de uma consulta dentro do executor, como a passagem recursiva pelos nós da árvore de execução, coleta de métricas de instrumentação e liberação de recursos. Em seguida, será apresentado o modelo "pull" e o fluxo de tuplas, no qual cada operador só produz tuplas quando solicitado pelo operador imediatamente acima, permitindo um pipeline entre operadores sem materializar conjuntos intermediários em disco. Também será discutido como os principais tipos de nós (Scans, Joins, Aggregates, Sorts e Limit) implementam essa chamada em cadeia e onde cada um consome recursos. Em seguida, abordaremos a avaliação de expressões e como filtragens, projeções e funções definidas pelo usuário são representadas por árvores de expressão, que são então interpretadas pelo executor. Finalmente, é apresentado o paralelismo intra-consulta, abordando a criação de workers adicionais e discutido os critérios utilizados pelo otimizador (custo total, seletividade, tamanho de dados) para decidir pela paralização ou não.