top of page

Ciclo de vida de uma query (SQL Server) - Parte 5

Faaala Galera! Animados para continuar nossa jornada pelo ciclo de vida de uma query? Hoje vamos encerrar essa serie de posts abrindo um parêntese bem grande/importante.


Nos posts anteriores passamos por todo o ciclo da query de forma mais macro, porém em uma parte especifica gostaria de aprofundar um pouco com vocês, veremos alguns detalhes do Storage Engine, Buffer Pool, Access Methods e Transaction Log. Vamos entender mais de perto como esses elementos trabalham em conjunto para garantir a eficiência das operações no banco de dados.


Cada tipo de comando dentro do SQL Server faz com que ele use um determinado componente e tome uma ação especifica.



Vamos começar com os comandos DDL, que trata da Linguagem de Definição de Dados. Aqui lidamos com comandos que criam ou modificam a estrutura dos objetos no banco de dados, como CREATE, ALTER e DROP.


Quando um procedimento DDL chega ao Query Executor, ele se comunica com um componente extremamente importante que é Storage Engine através do Access Methods. Este componente fornece todas as estruturas de armazenamento dos dados e índices necessárias, além de gerenciar as operações como alocação de páginas de dados e versionamento. Em seguida, o Access Methods repassa a requisição para o Buffer Manager.


Falando em Buffer Manager, ele é responsável por gerenciar o Buffer Pool (lembra que ler dados de memória é mais rápido do que ler do disco), que armazena dados em cache na memória. Ele organiza a leitura e escrita de páginas de dados e índices, garantindo a eficiência e desempenho das operações. Ele é responsável por todas as etapas que envolvem a recepção, armazenamento e entrega de dados. Se houver a necessidade de acessar algumas linhas de uma página de dados, o sistema verifica inicialmente se essa página está armazenada no data cache. Caso contrário, a página é buscada no disco (arquivo de dados mdf), armazenada no cache e somente então o resultado é disponibilizado para o Access Methods. Além disso, garante que as alterações no banco de dados sejam registradas no Transaction Log (arquivo .ldf) antes de serem efetuadas, garantindo a consistência dos dados em caso de falha do sistema. (se o recovery model estiver como full, você pode ter backups do log)




É importante destacar como citado acima que o Buffer Pool não se limita ao Plan Cache, ele também engloba o Data Cache. Este último é responsável por armazenar todas as páginas de dados lidas do disco antes de serem utilizadas. Essas páginas são mantidas em cache com base em uma política LRU (Least Recently Used), priorizando aquelas mais frequentemente acessadas, ou seja, a que faz mais tempo que não é usada poderá ser descartada se necessário.


Agora, vamos abordar os comandos DML, que envolvem a modificação de dados no banco de dados. Aqui, o Transaction Manager entra em ação em conjunto com o Buffer Manager. Antes de armazenar as páginas em cache, o Buffer Manager encaminha a requisição ao Transaction Manager para que seja registrado um log da transação no Transaction Log.




O Transaction Manager contem dois fiéis escudeiros que são componentes principais: o Lock Manager e o Log Manager. O Lock Manager lida com a concorrência de dados através de locks(Por exemplo, se dois usuários tentam atualizar o mesmo registro ao mesmo tempo, o Lock Manager entra em ação para garantir que apenas uma transação possa modificar o registro de cada vez, evitando assim problemas como a perda de dados ou inconsistências), enquanto o Log Manager registra o log da transação no Transaction Log. Esse processo, conhecido como Write-ahead Logging (WAL), garante a consistência dos dados em caso de falha do sistema.(se o recovery model estiver como full, você pode ter backups do log)


Por fim, o Transaction Log utiliza os Virtual Log Files (VLFs) para armazenar e ordenar os dados registrados. Esses VLFs são criados com base no próximo crescimento previsto do log (autogrowth) e garantem uma recuperação eficiente dos dados em caso de perca do banco de dados.


Uma forma simples de entender o papel de cada um é fazermos a seguinte analogia.


"Vamos imaginar que o processo de execução de comandos DDL e DML no SQL Server seja como organizar e gerenciar um armazém de um e-commerce. No caso do DDL, seria como montar novas prateleiras, adicionar ou remover seções para acomodar novos produtos ou reorganizar as categorias dos itens. Enquanto isso, o DML seria como adicionar novos produtos ao estoque, atualizar informações de produtos existentes, processar pedidos de clientes ou remover itens que não estão mais disponíveis.


No centro desse armazém, temos um gerente responsável por toda a operação. O Buffer Manager age como esse gerente, supervisionando o espaço disponível nas prateleiras (Buffer Pool) e garantindo que os produtos sejam organizados de forma eficiente. Ele também se comunica com o Transaction Manager, que é como o Analista de Estoque encarregado de manter o registro de todas as transações de compra, venda e estoque.

Enquanto isso, o Transaction Log é como um registro digital, onde cada transação é registrada para garantir que, mesmo em caso de contratempos, como uma falha no sistema, possamos reconstruir o que aconteceu e restaurar a integridade do estoque.


Assim como em um armazém de e-commerce, onde o gerente supervisiona a organização dos produtos e o Analista de Estoque mantém o controle das transações de compra e venda, no SQL Server, o Buffer Manager e o Transaction Manager trabalham juntos para garantir que as operações de criação e modificação de dados sejam realizadas de maneira eficiente e segura."


Finalizamos aqui a serie de posts sobre o ciclo de vida de uma query! Deixe nos comentários o que você mais gostou de aprender sobre esse tema tão importante.


Se você quer aprender muito mais e ser um(a) DBA SQL Server Jr faça parte da Iniciativa DBA (Saiba mais) !

Ebook 10 passos para ser um DBA SQL Jr (Saiba mais)!


Nos acompanhe em nossas redes sociais!

Grupo VIP Telegram: DBA On boarding 

Youtube: DBA On boarding 

Face & Instagram: DBA On boarding 


Até a próxima, tchau!

105 visualizações0 comentário

Posts recentes

Ver tudo

Comentarios


bottom of page