@01 – O que Acontece?

No 1º post da sessão O que Acontece. Vou apresentar através da ferramenta Process Monitor o que acontece no disco rígido durante o processamento de um simples comando Select executado através do Azure Data Studio.

Muito boa tarde galera! Salve 2020….

Seja bem-vindo ao primeiro post de 2020, em adicional ao @01 – O que Acontece? Post da nova sessão que estou lançando hoje aqui no meu blog.

Antes de apresentar este primeiro post, quero destacar alguns pontos em sobre esta nova sessão, em destaque o tipo de conteúdo você leitor vai encontrar a partir de hoje nos posts relacionados a ela:

1 – Os posts que serão publicados nesta sessão envolvem um pouco do Micrososft SQL Server, na verdade o objetivo dela é tentar mostrar como ele SQL Server, o qual aqui eu vou denominar como caixa, pensa exclusivamente fora dela, ou seja, como este grandioso SGBD (Sistema Gerenciador de Banco de Dados) faz para que tenhamos nossos dados armazenados ou apresentados em tela, ou como nós podemos de uma forma simples aprender, conhecer e desvendar os comportamentos realizados por ele além do uso das habituais ferramentas de administração: SQL Server Management Studio ou Azure Data Studio.

2 – Os posts aqui publicados, não apresentam o objetivo de demonstrar recursos, comandos, funcionalidades ou ensinar algo novo, na verdade eu quero tentar mostrar o que acontece muitas vezes quando por exemplo você esta processando um simples comando Select buscando milhões de dados em uma tabela, e o SQL Server Management Studio vai apresentando aos poucos os registros. Serão exclusivamente estes cenários, comportamentos e formas de atuação envolvendo o SQL Server e o ambiente que ele se encontra;

3 – Os posts aqui publicados não terão uma estrutura padrão, na verdade, O que Acontece, foi idealizado da mesma forma que inicialmente começamos a pensar. Vamos reunindo conhecimentos, ideias, possibilidades, hipóteses, analisando alternativas, mensurando teorias, até tentar construir algo mais concreto;

4 – Não será estabelecido um calendário de publicação, ao contrário, sempre que algum pensamento fora da caixa pairar sobre a minha cabeça, ou coisas do meu dia-a-dia relacionados as minhas experiências profissionais ou acadêmicas, novos posts serão publicados, bem como, os atuais atualizados e corrigidos;

5 – Não vou me ater ao certo ou errado, melhor ou pior, tecnicamente perfeito ou melhor tecnicamente, o que eu quero é tentar como eu já destaquei ilustrar o que acontece do lado de fora do SQL Server, o que ele muitas vezes esta realizando e não temos ideia do que está acontecendo; e

6 – Vou tentar em cada post trazer uma ferramenta, aplicativo ou utilitário existente no próprio sistema operacional que possa nos ajudar a observar e entender o que está acontecendo de preferência em tempo real, em adicional, se possível utilizarei vídeos para elucidar de forma mais didática o objetivo do post.

Vamos começar nossa aventura.

Seja mais uma vez bem-vindo ao @01 – O que Acontece – Durante o processamento do comando Select no que se refere ao uso do Disco Rígido, para as operações de Leitura e Escrita?

Eu hoje de manhã brincando com a minha máquina, pensando justamente em algo diferente que gostaria de compartilhar com vocês, comecei a abrir alguns ferramentas que tenho instalado em meus ambientes de consultoria e treinamento, para minha surpresa, acabei me deparando com a coleção de utilitários existentes na fantástica Suíte – SysInternals presente desde as versões mais tradicionais do Windows, meu primeiro contato com esta suíte senão estou enganado foi em 2009.

Acredito que você já deve ter ouvido falado dela? Não é mesmo? Se a sua resposta foi, não!

Figura 1 – Sysinternals Suite.

Fique tranquilo, basta clicar no link: Sysinternals Suite, para saber mais sobre ela, destaco que seu criador e mantenedor, é Mark Russinovich, atualmente o homem forte da Microsoft para plataforma Azure.

Vasculhando os mais de 140 utilitários e ferramentas que forma a SysInternals, encontrei uma das que mais utilizei entre 2012 e 2016 nas minhas atividades como DBA na Flextronics em Sorocaba, trata-se da Process Monitor.

 

 

 

 

 

Figura 2 – Process Monitor.

Ferramenta que tem o objetivo segundo sua documentação oficial de: “É uma ferramenta de monitoramento avançada para Windows que mostra o sistema de arquivos em tempo real, registro e atividade de processo/segmento. Ele combina as características de dois utilitários Sysinternals legados, Filemon e Regmon, e adiciona uma extensa lista de melhorias, incluindo filtragem rica e não destrutiva, propriedades abrangentes de eventos, tais identificações de sessão e nomes de usuário, informações de processo confiáveis, pilhas de tópicos completos com suporte integrado para cada operação, registro simultâneo a um arquivo e muito mais. Seus recursos excepcionalmente poderosos farão do Process Monitor uma utilidade central em seu sistema de solução de problemas e kit de ferramentas de caça a malware.”

Foi a partir do momento que executei a Process Monitor e comecei novamente a trabalhar com ela, que pensei na possibilidade de fazer uso da mesma para simplesmente observar em tempo real o que um comando Select pesquisando mais de 18 milhões de linhas de registros lógicos armazenados em uma tabela com aproximadamente 3.5Gbs (Gibabytes) de espaço ocupado em disco.

Neste momento estava surgindo o primeiro post da sessão O que Acontece.


Chegou a hora de ver então o que acontece…..

Espero que você já tenha feito o download da suíte ou especificamente da ferramenta Process Monitor, seguindo em frente inicie o Process Monitor em seu ambiente, a mesma deverá apresentar uma tela similar a Figura 3 apresentada abaixo:

Figura 3 – Ferramenta Process Monitor em execução.

A outra ferramenta que estaremos utilizando para executar o comando Select, será o Azure Data Studio, o qual também deverá já estar instalado em sua máquina, caso você queira utilizar o SQL Server Management Studio também é possível, mas será necessário realizar uma pequena alteração quando estivermos trabalhando com os filtros do Process Monitor.

Ao abrir o Azure Data Studio, conecte-se em seu servidor e acesse o seu banco de dados de preferência, se possível selecione uma tabela que contenha uma quantidade considerável de registros se preferência entre 1 ou 2 milhões de linhas.

Estarei fazendo uso justamente do ambiente que eu destaquei anteriormente, vou utilizar uma tabela que possui neste momento mais de 18 milhões de linhas de registros lógicos armazenadas, atualmente mantida no meu SQL Server 2019 CU1 – Enterprise Edition, banco de dados com nível de compatibilidade 150. Caso você esteja utilizando uma versão ou edição diferente ou anterior não tem problema.

O comando Select que será processado, basicamente consiste em um Select tradicional varrendo toda tabela, fazendo uso do comando Order By em uma coluna do tipo DateTime para apresentar os valores em ordem decrescente, conforme o Bloco de Código 1 apresenta abaixo:

— Bloco do Código 1 —

Select * From Queimadas2003

Order By DataHora DESC

Go

Importante: Não vou me atender se esta correto ou não fazer uso do comando Select acompanhado do símbolo de asterisco, este é um assunto bem conhecido e difundido por todos, recomendo em seus ambientes que você troque o símbolo * pelo nome das referidas e específicas colunas.

Avançando mais um pouco, precisamos preparar o Process Monitor para apresentar em tela os processos que serão demandados pelo comando Select no que se refere a apresentar o conjunto de linhas durante sua execução em tela. Sabemos que os dados apresentados em tela são processados temporariamente enquanto o comando Select é executado. Este é o ponto do nosso questionamento. O que Acontece? A resposta você vai ver daqui a pouco.

Temos a necessidade de voltar para o Process Monitor e utilizar o recurso de filtro especificando que seja apresentado somente o processos relacionados ao Azure Data Studio no processamento do comando Select, sendo este processo conhecido como MicrosoftSqlToolsServiceLayer.exe para o Azure Data Studio e Ssms.exe para o SQL Server Management Studio.

A Figura 4 abaixo ilustra o botão Filter existente no Process Monitor, não se esqueça de clicar neste botão:

Figura 4 – Botão Filter existente na ferramenta Process Monitor.

Agora que você já conhece este botão, espero que já tenha clicado no mesmo para que seja aberta a tela de filtros, vamos realizar uma pequena personalização, adicionando um novo filtro baseado na configuração apresentada na Figura 5:

Figura 5 – Configurando um novo filtro no Process Monitor.

Após selecionar Process Name, e depois Constains, você deve digitar no textbox o valor MicrosoftSqlToolsServiceLayer.exe, e por último clicar nos botões Apply e Ok respectivamente.

Observação: Será apresentada uma pequena tela realizando o processo de filtro, voltando para tela principal do Processo Monitor, recomando clicar no botão Clear ao lado do botão filter para realizar uma limpeza na tela, isso vai facilitar identificar e entender o que será monitorado.

Pronto nosso filtro foi adicionado, o Process Monitor já está pronto para filtro e apresentar em tela o que vai acontecer durante o processamento do comando Select. Volte para o Azure Data Studio, selecione sua query e clique no botão RUN.

E ai já clicou no botão RUN? Ainda não, vamos clique e volte para o Processo Monitor, e comece a observar o que vai acontecer…..Recomendo que você coloque lado a lado a tela do Process Monitor e do Azure Data Studio para justamente evidenciar o processamento e exclusão de ambas as ferramentas, conforme ilustra a Figura 6 abaixo:

Figura 6 – Process Monitor e Azure Data Studio lado a lado.

Show, muito legal, temos as duas ferramentas estão lado a lado, neste momento trabalhando, o processamento do comando Select esta sendo realizado pelo SQL Server retornando os dados para o Azure Data Studio, mas para que isso possa acontecer, estão sendo criados na pasta de arquivos temporários na minha máquina diversos arquivos com a extensão .tmp conhecido como Temp File, os quais representam partes dos dados que estão sendo manipulados nos processo de leitura e escrita em disco.

Caso você tenha a curiosidade para saber mais sobre cada arquivo criado, basta no Process Monitor dar um duplo clique em um dos arquivos para que seja aberta a tela de propriedades, composta por três guias: Event, Process e Stack, as quais apresentam informações relacionadas ao arquivo e o que o mesmo contem de estrutura e valores temporários.

As Figuras 7, 8 e 9 apresentadas abaixo ilustram os valores existentes em cada guia:

Figura 7 – Events.

Podemos notar a operação que esta sendo feita para esta arquivo, que consiste em WriteFile (escrita no arquivo), bem como, o caminho do mesmo que na minha máquina esta definido por padrão na unidade C:\ para pasta Temp.

Figura 8 – Process.

Fica totalmente perceptível qual é o processo que esta sendo executado, sua versão e arquivo executável, em adicional a linha de comando responsável por sua execução, incluíndo dados da arquitetura do processador, número do id do processo, sessão e usuário que esta sendo utilizado. Além disso, todos os módulos existentes no Sistema Operacional e softwares adicionais envolvidos na execução que estão totalmente relacionados ao processo.

Olha quanta coisa podemos identificar e aprender, até mesmo em um processo de Análise de performance, Tunning, Refinamento do Ambiente, Manutenção e Troubleshooting, é algo fora do comum o que esta ferramenta nos ajuda e nos faz entender o que acontece.

Figura 9 – Stack.

Nesta guia encontramos todo empilhamento de recursos que envolvem o sistema operacional, através do uso de suas .dlls e camadas internas para que o comando Select que esta sendo processado pelo SQL Server seja retornado em tela.

Caso você queira saber mais sobre cada stack envolvido do processo, os arquivos e suas propriedades, nesta mesma guia você vai encontrar um botão chamado Search, o qual vai levar você diretamente para página da documentação oficial Microsoft sobre o arquivo ou stack selecionado, conforme este link apresenta.


Com isso, chegamos ao final do @01 – O que Acontece – Durante o processamento do comando Select no que se refere ao uso do Disco Rígido, para as operações de Leitura e Escrita?

Espero que você tenha observado, percebido o que aconteceu enquanto um comando Select estava sendo executado no Azure Data Studio e processado pelo SQL Server 2019 CU1.

De uma forma simples, sem nenhuma análise técnica ou comprovação por parte dos dados, são criados arquivos temporários que vão armazenando partes das linhas de registros lógicos existentes em nossas tabelas e posteriormente estes arquivos retornam o conteúdo para ferramenta que esta fazendo o busca e apresentação dos dados em tela.

E ai gostou desta primeiro post? Espero que sim.


Mais uma vez obrigado por sua visita, aproveite para acessar as outras sessões existentes no meu blog.

Um forte abraço.

Autor: Junior Galvão - MVP

Profissional com vasta experiência na área de Tecnologia da Informação e soluções Microsoft. Pós-Graduado no Curso de Gestão e Engenharia de Processos para Desenvolvimento de Software com RUP na Faculdade FIAP – Faculdade de Informática e Administração Paulista de São Paulo. Graduado no Curso Superior em Gestão da Tecnologia de Sistemas de Informação pela Uninove – Campus São Roque. Formação MCDBA Microsoft, autor de artigos acadêmicos e profissionais postados em Revistas, Instituições de Ensino e WebSistes. Meu primeiro contato com tecnologia ocorreu em 1994 após meus pais comprarem nosso primeiro computador, ano em que as portas para este fantástico mundo se abriram. Neste mesmo ano, comecei o de Processamento de Dados, naquele momento a palavra TI não existia, na verdade a Tecnologia da Informação era conhecida como Computação ou Informática, foi assim que tudo começou e desde então não parei mais, continuando nesta longa estrada até hoje. Desde 2001 tenho atuado como Database Administrator – Administrador de Banco de Dados – SQL Server em tarefas de Administração, Gerenciamento, Migração de Servidores e Bancos de Dados, Estratégias de Backup/Restauração, Replicação, LogShipping, Implantação de ERPs que utilizam bancos SQL Server, Desenvolvimento de Funções, Stored Procedure, entre outros recursos. Desde 2008 exerço a função de Professor Universitário, para as disciplinas de Banco de Dados, Administração, Modelagem de Banco de Dados, Programação em Banco de Dados, Sistemas Operacionais, Análise e Projetos de Sistemas, entre outras. Experiência na Coordenação de Projetos de Alta Disponibilidade de Dados, utilizando Database Mirroring, Replicação Transacional e Merge, Log Shipping, etc. Trabalhei entre 2011 e 2017 como Administrador de Banco de Dados e Coordenador de TI no FIT – Instituto de Tecnologia da Flextronics, atualmente exerço a função de Professor Universitário na FATEC São Roque. CTO da Galvão Tecnologia, consultoria especializada em Gestão de TI, Administração de Servidores Windows Server, Bancos de Dados Microsoft SQL Server e Virtualização. Possuo titulação Oficial Microsoft MVP e reconhecimentos: MCC, MSTC e MIE.