In-Memory OLTP – “Hekaton” – Parte1

Posted on junho 5, 2013

8


Estamos na semana do TechEd North America 2013 – http://channel9.msdn.com/Events/TechEd/NorthAmerica/2013#fbid=JoYYaZPa4mS e com isso estamos presenciando aqui algumas mudanças nos produtos assim como suas evoluções, e que evoluções. Bem, no KeyNote nos foi apresentado que teremos o SQL Server 2014 – http://channel9.msdn.com/Events/TechEd/NorthAmerica/2013#fbid=JoYYaZPa4mS e com isso diversas novidades estão por vim, e aqui no meu blog trarei todas as novidades do SQL Server dentre outros.

 

No SQL Server 2012 temos um excelente recurso chamado ColumnStore Index, no qual escrevo constantemente aqui – https://luanmorenodba.wordpress.com/2012/03/16/entenda-o-columnstore-indexes/https://luanmorenodba.wordpress.com/2013/05/23/columnstore-index-vs-covering-index-o-melhor-ndice-para-seu-dw/  porém esse recurso é totalmente voltado para trabalhar em ambientes OLAP, por isso o mesmo é somente Read-Only no SQL Server 2012, fazendo com que ambientes OLTP que possuem diversas operações de DML não se beneficiem desse excelente recurso In-Memory.

 

Porém agora no SQL Server 2014 teremos o “Hekaton”, que é um novo recurso in-memory para ambientes OLTP ou seja, com esse recurso podemos realizar operações de DML.  O “Hekaton” é uma nova “Engine” que pode colocar “alocar” o seu banco de dados em memória, porém o mais importante é que o mesmo é feito sobe demanda ou seja, você escolhe quais tabelas você deseja colocar em memória e pronto agora você tem sua tabelas sendo acessadas até 30x mais rápido em memória.

 

Como o “Hekaton” funciona!

O “Hekaton” é voltado para ambientes OLTP com isso ele coloca as tabelas que você necessita em memória, com um novo mecanismo dentro do SQLOS ele gerencia essas tabelas em um modo chamado interop mode. Com isso a nova engine consegue se comunicar com as tabelas que estão em disco.

 

No “Hekaton” as informações são colocadas de uma outra forma, agora não temos mais uma B-Tree, agora os registros recebem um Hash Key, com isso o acesso de cada registro se torna único ou seja antes para encontrarmos um registro dentro de um tabela que já estava em memória era necessario entrar no nível ROOT do índice e assim andar pela estrutura para encontrá-lo e se todos os campos não estivessem nesse índice (não-cluster) era necessário ir ao índice primário para que a informação fosse encontrada, agora com o “Hekaton” o registro recebe um Hash ou seja a indentificação de um registro é muito mais rápida.

Com isso o “Hekaton” garante coisas jamais vistas, nesse novo recurso não teremos mais latch e nem locks em um registro ou seja todos podem acessar pegar o registro e alterá-lo, fazendo com que diversos paradigmas durante o acesso e gravação da informação sejam quebrados.

 

(Figura 1 – Demonstração do “Hekaton” no OLTP – http://www.theregister.co.uk/2013/06/03/microsoft_sql_server_14_teched/)

 

Os registros são gravados dentro de diversos “Buckets” e cada registro recebe uma hash-key, com isso os registros são ordenados por hash-key. As transações  sempre se completam até porque elas terão que obedecer o ACID, porém no “Hekaton” elas vão além disso, quando um registro é selecionado uma versão desse registro é criada, porém o que é mais incrível é que esse registro não é criado na TempDB como o RCSI e Snapshot Isolation mais sim criado em memória, quando uma transação precisa acessar a versão antiga a mesma é acessada em memória ou seja “nada pode parar uma transação no Hekaton”. Se a transação não for persistida as mudanças não são colocadas em disco.

 

No “Hekaton” há dois modos: O interop mode e o native compiation.

Interop Mode – O “Hekaton” acessa ambas tabelas, as que estão em memória e as que estão em disco, com isso temos grandes ganhos de performance.

Aonde se mais aplica: Consultasl Ad-Hoc, consultas de relatórios, eliminação de latch.

 

Native Compilation – O “Hekaton”  acessa somente as tabelas que estão em memória, com isso o ganho de performance é ainda maior.

Aonde se mais aplica: Operações em OLTP, melhora na lógica para que seja colocado em memória, escaabilidade.

 

Pelo pouco que foi explicado aqui, vemos que esse recurso irá revolucionar o SQL Server, por isso fiquem atentos as atualizações que farei aqui no blog.