Clico de vida de uma Query (Select)

Faaaala Galera,

A missão de hoje é sobre o Ciclo de vida de uma Query dentro do SQL Server.

Quais são as etapas para o processamento de um select? Onde inicia e onde termina cada processo ?

A estrutura basicamente é dividida em três pilares, Relational Engine, Storage Engine e Buffer Pool entre outros, onde cada pilar tem seu papel fundamental dentro da Engine SQL Server.

Relational Engine é responsável pelos processos de Query Optmizer, Query Executor e Parse entre outros, avaliando toda a parte algébrica, sintaxe e plano de execução da Query.

Storage Engine é o cara do I/O, responsável pelo gerenciamento e requisições de disco, alocações, Access Methods Code, Buffer Manager e Transaction MGR

Buffer Pool tem vários papeis, mas, um dos mais importantes é o gerenciamento de memoria para o plano de execução e alocação de paginas no data cache.

A seguir, um modelo ilustrativo dos componentes da Engine.

Drawing1

Claro, dentro de cada processo existem  um mundo a parte, como por exemplo o Query Optimizer com suas n fases de otimização para gerar o plano de execução mais assertivo.


O Ciclo (Select):

O primeiro passo é estabelecer a conexão entre aplicação (ERP, CRM) e o SQL Server. Para isso, é utilizado um protocolo chamado Network Interface (SNI). No fundo o SNI utiliza um outro protocolo, na verdade, podem existir vários procolos e o mais conhecido é o famoso TCP/IP.

A imagem a seguir ilustra o inicio do ciclo, a aplicação enviado a query para o SQL Server.

Drawing1

Com a conexão estabelecida (TCP/IP), os pacotes TDS (Tabular Data Stream Endpoints) são repassados ao Protocolo Layer, que tem como papel “descriptografar” o pacote e validar a informação, assim como sua origem (client). Após isso o conteúdo (SQL Command) do pacote é enviado ao Command Parser.

Dra1wing1

Por sua vez o CMD Parser faz seu trabalho, primeiro validando o T-SQL, checando sintaxe, nomes de objetos, parâmetros, palavras chaves. A segunda parte é procurar no Buffer Pool se já existe um plano de execução compatível para está query, se sim, ele recupera este plano e executa (Query Executor), caso contrário, passa o result da analise(Query Tree) para o Query Optmizer que é o responsável por gerar o Execution Plan (plano de execução) que será usado na execução (próxima etapa) do ciclo.

No Optmizer, a query passa por diversas etapas(phases 0,1,2) de otimização, afim de encontrar o plano mais eficiente, com base no “cost-based” (I/O, CPU). É nesta etapa que as estatísticas são utilizadas servindo como Input de informação para tomada de decisão do Query Optimizer. Após o termino desta etapa, o plano de execução está pronto, passando o bastão para o Query Executor

O Query Executor é quem executa a Query, na verdade ele executa o plano de execução, colocando os operadores para trabalhar. É neste ponto também que ocorre a interação com a Storage Engine via interface Access Methods (OLE DB).

Access Methods passa a solicitação para o Buffer Manager recuperar a pagina de dados, se a pagina especifica estiver em memoria, o Buffer Pool solicita ao Data Cache que recupere a pagina, e retorna ao Access Methods (leituras logicas). Caso contrário, os dados são recuperados do disco (leituras físicas), colocados em cache e devolve o bastão para o Access Methods. 

PAGEIOLATCH – É a Wait Type que representa o tempo de ler uma pagina em disco e colocar em memoria.

Com os dados em mãos, o Access Methods devolve a informação para o Relational Engine que será enviada ao Client que a solicitou, e assim o result do select aparece na tela 🙂

Drawing12

Então…  Resumindo o processo:

1)  O SQL Server Interface (SNI) estabelece uma conexão com o Client utilizando um protocolo de rede como TCP/IP, Shared Memory. E posteriormente o cantal TDS está aberto para o envio das solicitações(Querys) aos SQL Server.

2) O SNI descriptografa o pacote TDS, pega a instrução e envia para o CMD Parser.

3) O CMD faz suas validações algébricas, de sintaxes, e procura no Buffer Pool se existe um plano de execução compatível com essa query. Se não existir, é gerado o Query Tree e é enviado ao Query Optimizer.

4)  O Query Optimizer realiza as validações, gerando um Plano de execução mais eficiente para a query e passa o Query Executor.

5) Em tempo de execução, o Query Executor faz requisições dos dados necessários para completar a query. Essa requisição é enviado ao Access Method via OLE DB.

6) O Access Method recebe a solicitação de pagina e passa ao Buffer Manager para providenciar a pagina de dados em memoria e retorna-lo.

7) O Buffer Manager verifica se a pagina está em cache, caso sim, ele retorna a pagina para o Access Method, Caso contrário, é solicitado uma leitura física no disco (.mdf) para capturar a pagina de dados e em seguida a pagina é alocada em memoria e posteriormente é retornado ao Access Methods.

8) E com o result em mãos, o Access Methos passa os dados de volta para o Relational Engine que será enviada de volta para o Client que solicitou.
Aprofundar cada processo do SQL Server, é fascinante, por isso irei publicar novos artigos sobre cada etapa do ciclo, para aprofundarmos no Relational Engine e Storage Engine, assim detalhando com maior riqueza o cérebro SQL Server.

Esse é o processamento macro do SELECT, Ok Luiz, mas e quando é um UPDATE/INSERT/DELETE? Haaaaaaaaa ai a coisa muda , isso é assunto para a próxima missão.

 

Grande Abraço….[]s

Anúncios

5 comentários sobre “Clico de vida de uma Query (Select)

    • Grande PatrocinioMaia…

      Muito Obrigado pelo Feedback!!!
      Sim, essa parte de “internals” é muito interessante, e aprendendo por debaixo dos panos facilita o entendimento como um todo e suas particularidades.

      Grande abraço.

      Curtir

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s