Ask Learn
Preview
Please sign in to use this experience.
Sign inThis browser is no longer supported.
Upgrade to Microsoft Edge to take advantage of the latest features, security updates, and technical support.
Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
Originalmente publicado no Lab27: https://www.lab27.com.br/a-histria-do-hekaton-parte-1/ |
Hekaton é uma funcionalidade que faz parte do “In-Memory Database” e está disponível a partir do SQL Server 2014.
Neste post quero mostrar um lado diferente do Hekaton. Vejo muita gente falando sobre a melhoria significativa de desempenho ao manter as tabelas em memória. Entretanto, o Hekaton não é exatamente isso! E, se fosse, deveria ser chamado de DBCC PINTABLE.
A funcionalidade denominada Hekaton nasceu a partir de uma constatação simples: as consultas T-SQL demoram milissegundos, enquanto que códigos nativos rodam em microssegundos. Veja o exemplo abaixo:
Esse código é centenas de vezes mais rápido do que o equivalente em T-SQL:
Qual o motivo dessa diferença de desempenho? Um grupo de pesquisadores da Microsoft Research junto com o time de desenvolvimento SQL Server trouxeram a possibilidade de empregar .NET como forma de codificação nativa no servidor. Afinal, por que não permitir que o SQL Server atinja esse desempenho de microssegundos? Além disso, por que não remover as sincronizações de thread entre CPUs, garantindo escalabilidade ao produto?
Assim nasceu a ideia do Hekaton…
Como fazer o SQL Server ter um desempenho semelhante ao código nativo?
Estou repetindo esse último item: não há locks envolvidos. Essa mudança é tão profunda que envolve mudanças significativas na forma como o Hekaton acessa as informações.
Por exemplo, no modelo atual os registros ficam armazenados em páginas de 8Kb. Portanto, múltiplos registros podem compartilhar uma mesma página e requerem o uso de Latches e Locks para sincronizar o acesso.
Hekaton, por outro lado, mantém uma lista ligada de registros. Essa lista é protegida por spinlocks, não sendo necessário realizar a operação de Latch/UnLatch. Essa é uma economia significativa de recursos, pois evita as transições para Kernel Mode e reduz o custo total de thread context switch.
Agora temos um código mais limpo:
A utilização de spinlock, no entanto, requer que os dados estejam previamente em memória. Não pode haver operações de leitura de disco enquanto as threads possuem spinlock. Em outras palavras, o Hekaton não utiliza PAGEIOLATCH ou PAGELATCH. Isso significa que todos os registros devem ficar em memória previamente.
Quem tem mais tempo de SQL Server (7.0, 2000, 2005) talvez se lembre do lendário e obsoleto comando DBCC PINTABLE. Esse comando garantia que a tabela ficasse em memória e o ganho de desempenho era decorrente da redução na quantidade de acesso ao disco. Na realidade, a eficácia do PINTABLE sempre foi muito questionável. A arquitetura do SQL Server garante que os dados mais acessados são mantidos em memória e, portanto, não há motivos que justificam seu uso. Esse foi um dos motivos pelo qual a Microsoft descontinuou esse comando.
Se alguém perguntar sobre qual a diferença entre Hekaton e DBCC PINTABLE, responda que eles são completamente diferentes.
O segredo do Hekaton é utilizar estruturas baseadas em registros e protegidas por spinlocks. Manter as tabelas em memória é um pré-requisito da arquitetura atual (e que pode ser melhorado no futuro).
Esqueça que isso tem alguma semelhança com DBCC PINTABLE, pois o Hekaton não utiliza o Buffer Pool. Ele possui uma estrutura à parte. A proposta do Hekaton era trazer o desempenho do código .NET para dentro do SQL Server.
Nesa primeira parte, apresentei os principais motivadores para o surgimento do Hekaton. Entretanto, houve uma série de evoluções na tecnologia até chegar à sua forma final. Se você conhece bem o Hekaton, sabe que não existe código .NET (e sim código em C) e que existem índices na forma de B-Tree para o Hekaton. Deixarei essa discussão para uma parte 2.
Você gostou do artigo? Deixe seu comentário com sugestões.
Fabricio Catae (@fcatae)
Please sign in to use this experience.
Sign in