SlideShare uma empresa Scribd logo
SQL Server 2016: In-Memory OLTP
Otimizando a performance
usando In-Memory OLTP
no SQL Server 2016
Felipe de Assis
@felipespas | DataEX
Felipe.assis@outlook.com
Luiz Henrique Garetti
@luizhgaretti | Microsoft
luizh.rosario@gmail.com
PATROCINADORES
PosConference – 09/10 – SP
Local:
Microsoft Brasil – SP
Inscrições:
http://tinyurl.com/SQLSat570
Felipe de Assis
 Consultor SQL Server na DataEX
 Graduado em Ciência da Computação
 MBA em Arquitetura e Gestão de TI
 Articulista na SQL Magazine
 MCTS, MCITP, MCSA, MCSE e MCT
 Blog: felipedba.wordpress.com
 Email: felipe.assis@outlook.com
Luiz Henrique Garetti
 vPFE SQL Server na Microsoft
 Graduado em Ciência da Computação
 Pós-graduado em Arquitetura de BDs
 Colunista no site iMasters e SQL Magazine
 MCT, MTA, MCTS, MCSA
 Blog: lhgaretti.wordpress.com
 Email: luizh.rosario@gmail.com
Agenda
BEGIN TRANSACTION
1- Introdução ao In-Memory OLTP
2- Principais conceitos
3- Índices
4- Procedures Nativamente Compiladas
5- Transaction Log
6- Migrando Disk Based para Memória
7- Cases Reais
COMMIT TRANSACTION
DEMONSTRAÇÃO
Afinal de contas, do que estamos falando?
Qual o potencial do In-Memory OLTP?
Referência: https://msdn.microsoft.com/en-us/library/dn133171.aspx
Introdução ao In-Memory OLTP
 Funcionalidade disponível a partir do SQL Server 2014
 Processamento transacional de altíssima performance
 Mecanismos de funcionamento totalmente repensados
 Novo conceito de armazenamento de dados
 Modelo otimista de concorrência
 Implantação praticamente transparente às aplicações
 Integrado com os principais recursos do SQL Server
Overview da arquitetura
DatafileLogfileIn-Memory FG
tabelas e índices in-memory query
interop
tabelas e índices disk-
based
execução de queries t-
sql
parser,
catalog,
optimizer
Compilador
in-memory
SPs nativamente
compiladas
tds handler
T1 IX1
T1 IX1T1 IX1
T2 IX2
T2 T2
• Disk-Based
• In-Memory
• Interop
Estrutura de arquivos In-Memory OLTP
CREATE DATABASE [Corporativo]
ON PRIMARY
(NAME = N‘Copor1',FILENAME = N'C:DataCoporrativo1.mdf'),
FILEGROUP [Hekaton_InMemory]
CONTAINS MEMORY_OPTIMIZED_DATA
(NAME = N‘Corp2', FILENAME = N'C:DataMemCorp2')
LOG ON (NAME = N‘Corp_log', FILENAME =
N'C:DataLogCorplog.ldf')
Filegroup Container
Create
Table
DDL
Code
Generated
and
Compiled
Table
DLL is
created
Table
DLL
loaded in
memory
DLLs geradas pelo In-Memory OLTP
Database ID
Module Loaded
sys.dm_os_loaded_modules
Object ID
Table
Tipos de Tabela In-Memory OLTP
 Dois novos tipos de tabelas:
 SCHEMA_ONLY
 Somente estrutura da tabela é persistida
 Índice requerido
 SCHEMA_AND_DATA
 Estrutura e dados da tabela são persistidos
 Dados são persistidos em arquivos chamados
Checkpoint Files (Filegroup In-Memory)
 Constraint Primary Key requerida
Criando tabelas otimizadas em memória
CREATE TABLE Example01_Data
(
Codigo INT NOT NULL IDENTITY,
Nome VARCHAR(100) COLLATE Latin1_General_100_BIN2 NOT NULL,
DataNasc DATETIME NOT NULL,
Endereco VARCHAR(100) NOT NULL,
Cidade VARCHAR(100) NOT NULL,
CONSTRAINT PK_Example01_Codigo
PRIMARY KEY NONCLUSTERED HASH (Codigo)
WITH (BUCKET_COUNT = 100),
INDEX IX_Nome NONCLUSTERED (Nome)
) WITH( MEMORY_OPTIMIZED = ON, DURABILITY = SCHEMA_AND_DATA )
GO
Pré-requisito
para indexar
colunas do
tipo texto no
SQL Server
2014
Definição da Tabela como
Memory Optimized
Durabilidade:
SCHEMA_AND_DATA ou SCHEMA_ONLY
Índice na coluna Nome
Pré-Requisito:
Primary Key
Como funciona o armazenamento de dados
da maneira tradicional (Disk-Based)?
Buffer Cache
Data
Page
8KB
Data
Page
8KB
Index
Page
8KB
Buffer Buffer Buffer
Data
Page
8KB
Data
Page
8KB
Index
Page
8KB
Buffer Buffer Buffer
Data
Page
8KB
Data
Page
8KB
Data
Page
8KB
Buffer BufferBuffer
Data
Page
8KB
Data
Page
8KB
Index
Page
8KB
Buffer BufferBuffer
Datafile(s) mdf ou ndf
Data
Page
8KB
Data
Page
8KB
Data
Page
8KB
Index
Page
8KB
Data
Page
8KB
Data
Page
8KB
Data
Page
8KB
Index
Page
8KB
Como funciona o armazenamento de dados
no In-Memory OLTP?
 In-Memory OLTP
não utiliza páginas
e extents
 Registros são
armazenados
individualmente
 Índices são
utilizados para
conectar registros
da mesma tabela
Memória
Row 1
Row 2
Row 3
Row 4
Row 5
Row 6
Row 7
Row 8
Tabela A
Tabela B
Estrutura dos registros em memória
End Ts StmIdBegin Ts IdxLinkCount
{
8 bytes
{
{
4 bytes
{2 bytes
Padding
Index
Pointers
8 bytes
Row Header Payload
8 bytes
(por índice)
{
2 bytes
{
 Cada registro possui seu próprio cabeçalho
Persistência de dados no In-Memory OLTP
Codigo Nome Disciplina
1 Neymar Ed. Física
Memória
Checkpoint
Files
Disco
2 Gabriel Jesus Teologia
3 Gabigol Psicologia Checkpoint
Thread
Codigo Nome Disciplina
1 Neymar Ed. Física
2 Gabriel Jesus Teologia
3 Gabigol Psicologia
Inserts
Deletes
3
Data Files Delta Files
 Tá bom! Então tudo é armazenado em memória...
E se o servidor cair?
Novos tipos de índices In-Memory
 Hash Indexes
 Ideal para consultas que:
 Recuperam registros específicos (lookups)
 Procuram registros usando igualdade (=)
 Pesquisas em colunas com alta cardinalidade (poucos
valores repetidos)
 Funcionamento diferente em relação à queries com
filtros compostos (mais de um predicado)
 Memória alocada previamente, no momento da
criação da tabela/índice
 Necessário pré-definir a quantidade de Hash Buckets
que serão criados
Exemplo: Hash Indexes na coluna “nome”
1
0
3
2
5
4
7
6
Neymar Ed. Fisica60, ...
Index Pointer NameTimestamps Class
Gabigol Psicologia7, ...
Array de Ponteiros (Buckets)
Gabriel Jesus Teologia7, ...
RowChain
SELECT * FROM Clientes WHERE CPF = @CPF
Novos tipos de índices In-Memory
 Range Indexes
 Ideal para consultas que:
 Pesquisam por intervalos de registros
 Utilizam predicados como >, <, >=, <=, BETWEEN, etc.
 Quantidade de registros é desconhecida
 Baseado em uma variação de árvore balanceada
conhecida como BW-Tree
 Único “elemento” do In-Memory Engine que usa
o conceito de páginas, mas ainda sim, funciona
diferente do tradicional (disk-based)
Exemplo: Range Index na primeira letra
1
3
4
5
6
Page Mapping TabIe
(Memory Addresses)
2
7
8
AE
ABCD EFG
HK
HIJ KLMNOP
GPZ
QV
QRSTU VWXYZ
PID2 PID1 PID3
Root
PID0
0 Novo Conceito:
BW-Tree
M
M
M
M
Data Rows
(Chain)
SELECT * FROM Pedidos WHERE DataPedido > @Data
Novos tipos de índices In-Memory
 Columnstore Indexes
 Novidade no SQL Server 2016
 Utilizado apenas por consultas interop
 Procedures nativamente compiladas não fazem uso
 Queries interop podem fazer uso do paralelismo e do
modo de processamento batch de forma mais eficiente
 Podem ser considerados “nonclustered” porque
geram uma cópia adicional dos dados
 Podem consumir entre 10% e 100% da
quantidade de memória alocada para a tabela
Exemplo: Criando um Columnstore Index
CREATE TABLE dbo.OrderDetailsBig
(
PedidoID INT NOT NULL
,ProdutoID INT NOT NULL
,PrecoUnitario MONEY NOT NULL
,Quantidade SMALLINT NOT NULL
,Desconto MONEY NOT NULL
,CONSTRAINT PK_Order_Details
PRIMARY KEY NONCLUSTERED HASH (OrderID,ProductID)
WITH (BUCKET_COUNT = 1000000)
,INDEX clcsi_OrderDetailsBig CLUSTERED COLUMNSTORE WITH
(COMPRESSION_DELAY = 60)
)
WITH (MEMORY_OPTIMIZED = ON, DURABILITY = SCHEMA_AND_DATA);
Criação do Índice Columnstore
Compression_Delay:
Periodicidade de compressão
DEMONSTRAÇÃO
Hash Indexes vs Range Indexes
Procedures Nativamente Compiladas
• T-SQL Compilado em DLLs (C++)
• Executado em baixo nível (Linguagem de Maquina)
• Somente para tabelas In-Memory – Oferece maior
performance e não permite interoperabilidade.
• T-SQL com limitações
In Memory
OLTP
Runtime
In Memory
OLTP
Compiler
DLL
Parser /
Algebrizer
Query
Optimizer
Query
Plan
Query
Tree
CREATE PROC
DDL
(T-SQL)
CREATE PROCEDURE [dbo].[InsertOrder]
(@id INT, @date DATETIME)
WITH
NATIVE_COMPILATION,
SCHEMABINDING,
AS
BEGIN ATOMIC
WITH
(TRANSACTION ISOLATION LEVEL = SNAPSHOT,
LANGUAGE = N'us_english')
-- Insert T-SQL…
END
Procedures Nativamente Compiladas
Identifica que a Procedure será
Nativamente Compilada em Memoria
Requerido
Transações >
Operações.
Isolation Level e Idioma
precisam ser definidos
no início da procedure
Uso do Transaction Log
T1 IX1 T2 IX2
UPDATE Example01
SET Descricao = 'Novo Valor'
WHERE Codigo = 1
Disk-Based In-Memory
In-Memory FG
Data Delta
In-Memory Checkpoint
- Transações In-Memory são
registradas no mesmo TLOG
- Apenas transações
confirmadas (commit) são
registradas
- Escrita mais eficiente obtida
através de compressão
DEMONSTRAÇÃO
Utilização do Transaction Log
em Tabelas In-Memory
Migrando tabelas Disk-Based para In-Memory
DEMONSTRAÇÃO
Table Usage Analysis
Migrando para In-Memory OLTP
Case – Shock Absorber
 Após mudar a arquitetura para utilizar in-memory (em
uma implementação conhecida como Shock Absorber)
o limite de throughput de envio de SMS passou de 1000
SMS/hora para 850 mil SMS/hora.
 Impacto positivo de 450%
na receita da empresa.
Case – Tabela Schema_Only
Procedure
de Insert
AVG Time
(2 Sessões paralelas)
Média CPU
(micro seg)
Disk-Based T-SQL 4025 ms 1.974.912
In-Memory T-SQL 708 ms 366.233
Onde:
Empresa de
processamento
de transações
de crédito.
Resultado:
Throughput de
processamento
otimizado em
mais de 400%.
OPCIONAL: DEMONSTRAÇÃO
Particionamento Lógico de Tabelas
usando In-Memory OLTP
https://msdn.microsoft.com/en-us/library/dn133171.aspx
Algumas referências...
White Paper: SQL Server 2016 CTP 3 In-Memory OLTP Internals
http://sqlblog.com/blogs/kalen_delaney/archive/2016/01/19/sql-server-2016-ctp3-in-
memory-oltp-internals-whitepaper.aspx
Book: SQL Server Internals: In-Memory OLTP
http://www.red-gate.com/library/sql-server-internals-in-memory-oltp
Shock Absorber
https://blogs.technet.microsoft.com/dataplatforminsider/2013/09/19/in-memory-oltp-
common-design-pattern-high-data-input-rateshock-absorber/
Calling Native Compiled Procedures Best Practices
http://sqlperformance.com/2015/06/t-sql-queries/how-not-to-call-hekaton-procedures
Felipe de Assis – Série sobre In Memory OLTP
https://felipedba.wordpress.com/category/in-memory-oltp
Não abordamos por limitações de tempo...
 Funções In-Memory (msdn): http://tinyurl.com/ztt33ho
 Isolation Levels (msdn): http://tinyurl.com/hh24e7u
 Checkpoint Files (msdn): http://tinyurl.com/gl47x56
 Constraints (Pinal Dave): http://tinyurl.com/jgxdalc
 Garbage Collector (msdn): http://tinyurl.com/hx6wbts
 Monitoração (Murilo Miranda): http://tinyurl.com/jfxmo38
 Resource Governor (msdn): http://tinyurl.com/zdhzvce
 Modelo otimista de concorrência (P. Dave): http://tinyurl.com/hn5oyqr
Próximos passos
Otimizando a performance com in memory no sql 2016
Otimizando a performance com in memory no sql 2016

Mais conteúdo relacionado

Mais procurados (20)

PDF
PHP e MySQL para iniciantes
Eduardo Mendes
 
PPTX
T-SQL na prática com SQL SERVER Express 2012
Rodrigo Ribeiro
 
PDF
Apostila Curso Php My Sql(Portugues)
guestcc491
 
PDF
ODI Series - Exportar Tabelas para Arquivo Texto
Caio Lima
 
PDF
Apostila ib
Joao Maria John Sincero
 
PPTX
SQL Server 2012
Hcode
 
DOCX
Odi tutorial configuração repositórios mestre e trabalho
Caio Lima
 
PDF
Introdução ao SQL
Thiago Freitas
 
PDF
Linguagem SQL (com MySQL)
Marco Pinheiro
 
PDF
7869510 109domine-o-excel-2007[1]
Paula Ferreira
 
PDF
ODI SERIES - Melhores Práticas
Caio Lima
 
PDF
Aula 08 - Introdução ao banco de dados MySQL - Programação Web
Dalton Martins
 
ZIP
3260 php truquesmagicos %281%29
Juliana Nascimento
 
PDF
ODI Tutorial - Modelo de Dados
Caio Lima
 
DOCX
Exercícios de mysql
Leo Frazão
 
PDF
37 consultando tabelas_com_sql_no_sql_server
José Henrique Sento Sé
 
PDF
Banco de Dados - MySQL Basico
Rangel Javier
 
PPTX
Aula 10 banco de dados
Jorge Ávila Miranda
 
PPTX
Treinamento de SQL Básico
Igor Alves
 
PDF
PL/SQL - Conceitos Básicos
Danilo Braga
 
PHP e MySQL para iniciantes
Eduardo Mendes
 
T-SQL na prática com SQL SERVER Express 2012
Rodrigo Ribeiro
 
Apostila Curso Php My Sql(Portugues)
guestcc491
 
ODI Series - Exportar Tabelas para Arquivo Texto
Caio Lima
 
SQL Server 2012
Hcode
 
Odi tutorial configuração repositórios mestre e trabalho
Caio Lima
 
Introdução ao SQL
Thiago Freitas
 
Linguagem SQL (com MySQL)
Marco Pinheiro
 
7869510 109domine-o-excel-2007[1]
Paula Ferreira
 
ODI SERIES - Melhores Práticas
Caio Lima
 
Aula 08 - Introdução ao banco de dados MySQL - Programação Web
Dalton Martins
 
3260 php truquesmagicos %281%29
Juliana Nascimento
 
ODI Tutorial - Modelo de Dados
Caio Lima
 
Exercícios de mysql
Leo Frazão
 
37 consultando tabelas_com_sql_no_sql_server
José Henrique Sento Sé
 
Banco de Dados - MySQL Basico
Rangel Javier
 
Aula 10 banco de dados
Jorge Ávila Miranda
 
Treinamento de SQL Básico
Igor Alves
 
PL/SQL - Conceitos Básicos
Danilo Braga
 

Destaque (20)

PPTX
SQL Server It Just Runs Faster
Bob Ward
 
PPTX
SQL Server In-Memory OLTP: What Every SQL Professional Should Know
Bob Ward
 
PPTX
Inside SQL Server In-Memory OLTP
Bob Ward
 
PDF
CopyofAResume
William Jones
 
PPT
Psicopedagoga rj.com.br Cadastro
PsicopedagogaRJ
 
PPTX
Creep Coursework Presentation
kess1a
 
PDF
Copia de resumen qué son los mapas conceptuales.doc%0 a
noeliavillar
 
PPTX
Pre Production (Planning)
Rahul Karavadra
 
PDF
Context Based Learning for GIS: an Interdisciplinary Approach
Patrick Rickles
 
PPT
портфолио голубович
golubovicholga
 
PDF
Portfolio Draft
Victoria Esser
 
PDF
Continuous Delivery at Oracle Database Insights
Michael Medin
 
PDF
Using puppet to leverage DevOps in Large Enterprise Oracle Environments
Bert Hajee
 
PPTX
Edition Based Redefinition - Continuous Database Application Evolution with O...
Lucas Jellema
 
PPTX
Nature and animal conservation by art
ART Raviteja akarapu
 
PPSX
Continuous Integration - Oracle Database Objects
Prabhu Ramasamy
 
PDF
ckitterman resume
craig kitterman
 
PPT
Twenty is Plenty
Bob Ward
 
PPTX
SQL Server R Services: What Every SQL Professional Should Know
Bob Ward
 
PPTX
Qué fue el holocausto judío
Yamila Valdez
 
SQL Server It Just Runs Faster
Bob Ward
 
SQL Server In-Memory OLTP: What Every SQL Professional Should Know
Bob Ward
 
Inside SQL Server In-Memory OLTP
Bob Ward
 
CopyofAResume
William Jones
 
Psicopedagoga rj.com.br Cadastro
PsicopedagogaRJ
 
Creep Coursework Presentation
kess1a
 
Copia de resumen qué son los mapas conceptuales.doc%0 a
noeliavillar
 
Pre Production (Planning)
Rahul Karavadra
 
Context Based Learning for GIS: an Interdisciplinary Approach
Patrick Rickles
 
портфолио голубович
golubovicholga
 
Portfolio Draft
Victoria Esser
 
Continuous Delivery at Oracle Database Insights
Michael Medin
 
Using puppet to leverage DevOps in Large Enterprise Oracle Environments
Bert Hajee
 
Edition Based Redefinition - Continuous Database Application Evolution with O...
Lucas Jellema
 
Nature and animal conservation by art
ART Raviteja akarapu
 
Continuous Integration - Oracle Database Objects
Prabhu Ramasamy
 
ckitterman resume
craig kitterman
 
Twenty is Plenty
Bob Ward
 
SQL Server R Services: What Every SQL Professional Should Know
Bob Ward
 
Qué fue el holocausto judío
Yamila Valdez
 
Anúncio

Semelhante a Otimizando a performance com in memory no sql 2016 (20)

PPTX
Otimizando a performance com in-memory no SQL 2016
Luiz Henrique Garetti Rosário
 
PPTX
Novidades do Sql Server 2016
Roberto Fonseca
 
PDF
AULA_INDICES_BANCO_DE_DADOS_RELACIONAISPARTE_1.pdf
Ademar Trindade
 
PDF
Expremendo performance do sql server
Felipe Ferreira
 
PPTX
TechEd 2011: Raio-X do SQL Server: Arquitetura Interna do Gerenciador de Ban...
Fabrício Catae
 
PDF
pgDay Campinas – 2015
Vinícius Schmidt
 
PPTX
Como funciona um banco de dados? (Worldwide Online TechDay 2010)
Fabrício Catae
 
PPTX
FLISOL 2017 - SQL Server no Linux
Vithor da Silva e Silva
 
PPTX
Novidades do SQL Server 2008
Comunidade NetPonto
 
PDF
SQL Tuning Intro
Gabriel Cestaro
 
PPTX
MANUTENÇÃO DE ÍNDICES: O GUIA DEFINITIVO
Luciano Moreira
 
PDF
Apostila de sql basico
Fernando Palma
 
PPTX
Como funciona um banco de dados? (Prudente TechDay 2010)
Fabrício Catae
 
PPTX
5 coisas que todo desenvolvedor deveria saber sobre sql server
Marcos Freccia
 
PPTX
Oracle Database 12c - Novas Características para DBAs e Desenvolvedores
Alex Zaballa
 
PPTX
Modulo-02-Aula-03-conteudo-para-cer.pptx
AugustoNicolau2
 
PDF
BD I - Aula 15 B - Criacao de tabelas
Rodrigo Kiyoshi Saito
 
PPT
Resumo da Sessão "Effective Geodatabase Programming" do Esri DevSummit 2012
Bruno Caimar
 
PPTX
SQL Server – Performance e Tunning
pt_programar
 
Otimizando a performance com in-memory no SQL 2016
Luiz Henrique Garetti Rosário
 
Novidades do Sql Server 2016
Roberto Fonseca
 
AULA_INDICES_BANCO_DE_DADOS_RELACIONAISPARTE_1.pdf
Ademar Trindade
 
Expremendo performance do sql server
Felipe Ferreira
 
TechEd 2011: Raio-X do SQL Server: Arquitetura Interna do Gerenciador de Ban...
Fabrício Catae
 
pgDay Campinas – 2015
Vinícius Schmidt
 
Como funciona um banco de dados? (Worldwide Online TechDay 2010)
Fabrício Catae
 
FLISOL 2017 - SQL Server no Linux
Vithor da Silva e Silva
 
Novidades do SQL Server 2008
Comunidade NetPonto
 
SQL Tuning Intro
Gabriel Cestaro
 
MANUTENÇÃO DE ÍNDICES: O GUIA DEFINITIVO
Luciano Moreira
 
Apostila de sql basico
Fernando Palma
 
Como funciona um banco de dados? (Prudente TechDay 2010)
Fabrício Catae
 
5 coisas que todo desenvolvedor deveria saber sobre sql server
Marcos Freccia
 
Oracle Database 12c - Novas Características para DBAs e Desenvolvedores
Alex Zaballa
 
Modulo-02-Aula-03-conteudo-para-cer.pptx
AugustoNicolau2
 
BD I - Aula 15 B - Criacao de tabelas
Rodrigo Kiyoshi Saito
 
Resumo da Sessão "Effective Geodatabase Programming" do Esri DevSummit 2012
Bruno Caimar
 
SQL Server – Performance e Tunning
pt_programar
 
Anúncio

Mais de Luiz Henrique Garetti Rosário (14)

PPTX
Streaming architecture with big data clusters
Luiz Henrique Garetti Rosário
 
PPT
TDC - Planejando data Lake com big data clusters
Luiz Henrique Garetti Rosário
 
PPTX
SQL SAT Salvador - Arquitetando Data Lake Multicloud
Luiz Henrique Garetti Rosário
 
PPTX
Meetup - Data Lake
Luiz Henrique Garetti Rosário
 
PPTX
Imasters - HA e DR como seguro de vida do DBA
Luiz Henrique Garetti Rosário
 
PPTX
Meetup Tivir - Big Data Clusters
Luiz Henrique Garetti Rosário
 
PPTX
Sql maniacs sql server 2019 Big Data Clusters
Luiz Henrique Garetti Rosário
 
PPTX
Sql saturday joinville 2019 sql server 2019 Big Data Clustes
Luiz Henrique Garetti Rosário
 
PPTX
SQL Saturday SP - SQL Server 2019 Big Data Clusters
Luiz Henrique Garetti Rosário
 
PPTX
SQL Maniacs - SQL Server 2019 Big Data Clusters
Luiz Henrique Garetti Rosário
 
PPTX
Sql server 2019 big data cluster
Luiz Henrique Garetti Rosário
 
PPTX
High Availability and Disaster Recovery salvando vidas
Luiz Henrique Garetti Rosário
 
PPTX
High availability e Disaster Recovery é o seguro de vida de todo DBA
Luiz Henrique Garetti Rosário
 
PPTX
Escovando bit com alwayson sql server 2014
Luiz Henrique Garetti Rosário
 
Streaming architecture with big data clusters
Luiz Henrique Garetti Rosário
 
TDC - Planejando data Lake com big data clusters
Luiz Henrique Garetti Rosário
 
SQL SAT Salvador - Arquitetando Data Lake Multicloud
Luiz Henrique Garetti Rosário
 
Meetup - Data Lake
Luiz Henrique Garetti Rosário
 
Imasters - HA e DR como seguro de vida do DBA
Luiz Henrique Garetti Rosário
 
Meetup Tivir - Big Data Clusters
Luiz Henrique Garetti Rosário
 
Sql maniacs sql server 2019 Big Data Clusters
Luiz Henrique Garetti Rosário
 
Sql saturday joinville 2019 sql server 2019 Big Data Clustes
Luiz Henrique Garetti Rosário
 
SQL Saturday SP - SQL Server 2019 Big Data Clusters
Luiz Henrique Garetti Rosário
 
SQL Maniacs - SQL Server 2019 Big Data Clusters
Luiz Henrique Garetti Rosário
 
Sql server 2019 big data cluster
Luiz Henrique Garetti Rosário
 
High Availability and Disaster Recovery salvando vidas
Luiz Henrique Garetti Rosário
 
High availability e Disaster Recovery é o seguro de vida de todo DBA
Luiz Henrique Garetti Rosário
 
Escovando bit com alwayson sql server 2014
Luiz Henrique Garetti Rosário
 

Otimizando a performance com in memory no sql 2016

  • 1. SQL Server 2016: In-Memory OLTP Otimizando a performance usando In-Memory OLTP no SQL Server 2016 Felipe de Assis @felipespas | DataEX [email protected] Luiz Henrique Garetti @luizhgaretti | Microsoft [email protected]
  • 3. PosConference – 09/10 – SP Local: Microsoft Brasil – SP Inscrições: http://tinyurl.com/SQLSat570
  • 4. Felipe de Assis  Consultor SQL Server na DataEX  Graduado em Ciência da Computação  MBA em Arquitetura e Gestão de TI  Articulista na SQL Magazine  MCTS, MCITP, MCSA, MCSE e MCT  Blog: felipedba.wordpress.com  Email: [email protected]
  • 5. Luiz Henrique Garetti  vPFE SQL Server na Microsoft  Graduado em Ciência da Computação  Pós-graduado em Arquitetura de BDs  Colunista no site iMasters e SQL Magazine  MCT, MTA, MCTS, MCSA  Blog: lhgaretti.wordpress.com  Email: [email protected]
  • 6. Agenda BEGIN TRANSACTION 1- Introdução ao In-Memory OLTP 2- Principais conceitos 3- Índices 4- Procedures Nativamente Compiladas 5- Transaction Log 6- Migrando Disk Based para Memória 7- Cases Reais COMMIT TRANSACTION
  • 7. DEMONSTRAÇÃO Afinal de contas, do que estamos falando? Qual o potencial do In-Memory OLTP? Referência: https://msdn.microsoft.com/en-us/library/dn133171.aspx
  • 8. Introdução ao In-Memory OLTP  Funcionalidade disponível a partir do SQL Server 2014  Processamento transacional de altíssima performance  Mecanismos de funcionamento totalmente repensados  Novo conceito de armazenamento de dados  Modelo otimista de concorrência  Implantação praticamente transparente às aplicações  Integrado com os principais recursos do SQL Server
  • 9. Overview da arquitetura DatafileLogfileIn-Memory FG tabelas e índices in-memory query interop tabelas e índices disk- based execução de queries t- sql parser, catalog, optimizer Compilador in-memory SPs nativamente compiladas tds handler T1 IX1 T1 IX1T1 IX1 T2 IX2 T2 T2 • Disk-Based • In-Memory • Interop
  • 10. Estrutura de arquivos In-Memory OLTP CREATE DATABASE [Corporativo] ON PRIMARY (NAME = N‘Copor1',FILENAME = N'C:DataCoporrativo1.mdf'), FILEGROUP [Hekaton_InMemory] CONTAINS MEMORY_OPTIMIZED_DATA (NAME = N‘Corp2', FILENAME = N'C:DataMemCorp2') LOG ON (NAME = N‘Corp_log', FILENAME = N'C:DataLogCorplog.ldf') Filegroup Container Create Table DDL Code Generated and Compiled Table DLL is created Table DLL loaded in memory
  • 11. DLLs geradas pelo In-Memory OLTP Database ID Module Loaded sys.dm_os_loaded_modules Object ID Table
  • 12. Tipos de Tabela In-Memory OLTP  Dois novos tipos de tabelas:  SCHEMA_ONLY  Somente estrutura da tabela é persistida  Índice requerido  SCHEMA_AND_DATA  Estrutura e dados da tabela são persistidos  Dados são persistidos em arquivos chamados Checkpoint Files (Filegroup In-Memory)  Constraint Primary Key requerida
  • 13. Criando tabelas otimizadas em memória CREATE TABLE Example01_Data ( Codigo INT NOT NULL IDENTITY, Nome VARCHAR(100) COLLATE Latin1_General_100_BIN2 NOT NULL, DataNasc DATETIME NOT NULL, Endereco VARCHAR(100) NOT NULL, Cidade VARCHAR(100) NOT NULL, CONSTRAINT PK_Example01_Codigo PRIMARY KEY NONCLUSTERED HASH (Codigo) WITH (BUCKET_COUNT = 100), INDEX IX_Nome NONCLUSTERED (Nome) ) WITH( MEMORY_OPTIMIZED = ON, DURABILITY = SCHEMA_AND_DATA ) GO Pré-requisito para indexar colunas do tipo texto no SQL Server 2014 Definição da Tabela como Memory Optimized Durabilidade: SCHEMA_AND_DATA ou SCHEMA_ONLY Índice na coluna Nome Pré-Requisito: Primary Key
  • 14. Como funciona o armazenamento de dados da maneira tradicional (Disk-Based)? Buffer Cache Data Page 8KB Data Page 8KB Index Page 8KB Buffer Buffer Buffer Data Page 8KB Data Page 8KB Index Page 8KB Buffer Buffer Buffer Data Page 8KB Data Page 8KB Data Page 8KB Buffer BufferBuffer Data Page 8KB Data Page 8KB Index Page 8KB Buffer BufferBuffer Datafile(s) mdf ou ndf Data Page 8KB Data Page 8KB Data Page 8KB Index Page 8KB Data Page 8KB Data Page 8KB Data Page 8KB Index Page 8KB
  • 15. Como funciona o armazenamento de dados no In-Memory OLTP?  In-Memory OLTP não utiliza páginas e extents  Registros são armazenados individualmente  Índices são utilizados para conectar registros da mesma tabela Memória Row 1 Row 2 Row 3 Row 4 Row 5 Row 6 Row 7 Row 8 Tabela A Tabela B
  • 16. Estrutura dos registros em memória End Ts StmIdBegin Ts IdxLinkCount { 8 bytes { { 4 bytes {2 bytes Padding Index Pointers 8 bytes Row Header Payload 8 bytes (por índice) { 2 bytes {  Cada registro possui seu próprio cabeçalho
  • 17. Persistência de dados no In-Memory OLTP Codigo Nome Disciplina 1 Neymar Ed. Física Memória Checkpoint Files Disco 2 Gabriel Jesus Teologia 3 Gabigol Psicologia Checkpoint Thread Codigo Nome Disciplina 1 Neymar Ed. Física 2 Gabriel Jesus Teologia 3 Gabigol Psicologia Inserts Deletes 3 Data Files Delta Files  Tá bom! Então tudo é armazenado em memória... E se o servidor cair?
  • 18. Novos tipos de índices In-Memory  Hash Indexes  Ideal para consultas que:  Recuperam registros específicos (lookups)  Procuram registros usando igualdade (=)  Pesquisas em colunas com alta cardinalidade (poucos valores repetidos)  Funcionamento diferente em relação à queries com filtros compostos (mais de um predicado)  Memória alocada previamente, no momento da criação da tabela/índice  Necessário pré-definir a quantidade de Hash Buckets que serão criados
  • 19. Exemplo: Hash Indexes na coluna “nome” 1 0 3 2 5 4 7 6 Neymar Ed. Fisica60, ... Index Pointer NameTimestamps Class Gabigol Psicologia7, ... Array de Ponteiros (Buckets) Gabriel Jesus Teologia7, ... RowChain SELECT * FROM Clientes WHERE CPF = @CPF
  • 20. Novos tipos de índices In-Memory  Range Indexes  Ideal para consultas que:  Pesquisam por intervalos de registros  Utilizam predicados como >, <, >=, <=, BETWEEN, etc.  Quantidade de registros é desconhecida  Baseado em uma variação de árvore balanceada conhecida como BW-Tree  Único “elemento” do In-Memory Engine que usa o conceito de páginas, mas ainda sim, funciona diferente do tradicional (disk-based)
  • 21. Exemplo: Range Index na primeira letra 1 3 4 5 6 Page Mapping TabIe (Memory Addresses) 2 7 8 AE ABCD EFG HK HIJ KLMNOP GPZ QV QRSTU VWXYZ PID2 PID1 PID3 Root PID0 0 Novo Conceito: BW-Tree M M M M Data Rows (Chain) SELECT * FROM Pedidos WHERE DataPedido > @Data
  • 22. Novos tipos de índices In-Memory  Columnstore Indexes  Novidade no SQL Server 2016  Utilizado apenas por consultas interop  Procedures nativamente compiladas não fazem uso  Queries interop podem fazer uso do paralelismo e do modo de processamento batch de forma mais eficiente  Podem ser considerados “nonclustered” porque geram uma cópia adicional dos dados  Podem consumir entre 10% e 100% da quantidade de memória alocada para a tabela
  • 23. Exemplo: Criando um Columnstore Index CREATE TABLE dbo.OrderDetailsBig ( PedidoID INT NOT NULL ,ProdutoID INT NOT NULL ,PrecoUnitario MONEY NOT NULL ,Quantidade SMALLINT NOT NULL ,Desconto MONEY NOT NULL ,CONSTRAINT PK_Order_Details PRIMARY KEY NONCLUSTERED HASH (OrderID,ProductID) WITH (BUCKET_COUNT = 1000000) ,INDEX clcsi_OrderDetailsBig CLUSTERED COLUMNSTORE WITH (COMPRESSION_DELAY = 60) ) WITH (MEMORY_OPTIMIZED = ON, DURABILITY = SCHEMA_AND_DATA); Criação do Índice Columnstore Compression_Delay: Periodicidade de compressão
  • 25. Procedures Nativamente Compiladas • T-SQL Compilado em DLLs (C++) • Executado em baixo nível (Linguagem de Maquina) • Somente para tabelas In-Memory – Oferece maior performance e não permite interoperabilidade. • T-SQL com limitações In Memory OLTP Runtime In Memory OLTP Compiler DLL Parser / Algebrizer Query Optimizer Query Plan Query Tree CREATE PROC DDL (T-SQL)
  • 26. CREATE PROCEDURE [dbo].[InsertOrder] (@id INT, @date DATETIME) WITH NATIVE_COMPILATION, SCHEMABINDING, AS BEGIN ATOMIC WITH (TRANSACTION ISOLATION LEVEL = SNAPSHOT, LANGUAGE = N'us_english') -- Insert T-SQL… END Procedures Nativamente Compiladas Identifica que a Procedure será Nativamente Compilada em Memoria Requerido Transações > Operações. Isolation Level e Idioma precisam ser definidos no início da procedure
  • 27. Uso do Transaction Log T1 IX1 T2 IX2 UPDATE Example01 SET Descricao = 'Novo Valor' WHERE Codigo = 1 Disk-Based In-Memory In-Memory FG Data Delta In-Memory Checkpoint - Transações In-Memory são registradas no mesmo TLOG - Apenas transações confirmadas (commit) são registradas - Escrita mais eficiente obtida através de compressão
  • 28. DEMONSTRAÇÃO Utilização do Transaction Log em Tabelas In-Memory
  • 29. Migrando tabelas Disk-Based para In-Memory
  • 31. Case – Shock Absorber  Após mudar a arquitetura para utilizar in-memory (em uma implementação conhecida como Shock Absorber) o limite de throughput de envio de SMS passou de 1000 SMS/hora para 850 mil SMS/hora.  Impacto positivo de 450% na receita da empresa.
  • 32. Case – Tabela Schema_Only Procedure de Insert AVG Time (2 Sessões paralelas) Média CPU (micro seg) Disk-Based T-SQL 4025 ms 1.974.912 In-Memory T-SQL 708 ms 366.233 Onde: Empresa de processamento de transações de crédito. Resultado: Throughput de processamento otimizado em mais de 400%.
  • 33. OPCIONAL: DEMONSTRAÇÃO Particionamento Lógico de Tabelas usando In-Memory OLTP https://msdn.microsoft.com/en-us/library/dn133171.aspx
  • 34. Algumas referências... White Paper: SQL Server 2016 CTP 3 In-Memory OLTP Internals http://sqlblog.com/blogs/kalen_delaney/archive/2016/01/19/sql-server-2016-ctp3-in- memory-oltp-internals-whitepaper.aspx Book: SQL Server Internals: In-Memory OLTP http://www.red-gate.com/library/sql-server-internals-in-memory-oltp Shock Absorber https://blogs.technet.microsoft.com/dataplatforminsider/2013/09/19/in-memory-oltp- common-design-pattern-high-data-input-rateshock-absorber/ Calling Native Compiled Procedures Best Practices http://sqlperformance.com/2015/06/t-sql-queries/how-not-to-call-hekaton-procedures Felipe de Assis – Série sobre In Memory OLTP https://felipedba.wordpress.com/category/in-memory-oltp
  • 35. Não abordamos por limitações de tempo...  Funções In-Memory (msdn): http://tinyurl.com/ztt33ho  Isolation Levels (msdn): http://tinyurl.com/hh24e7u  Checkpoint Files (msdn): http://tinyurl.com/gl47x56  Constraints (Pinal Dave): http://tinyurl.com/jgxdalc  Garbage Collector (msdn): http://tinyurl.com/hx6wbts  Monitoração (Murilo Miranda): http://tinyurl.com/jfxmo38  Resource Governor (msdn): http://tinyurl.com/zdhzvce  Modelo otimista de concorrência (P. Dave): http://tinyurl.com/hn5oyqr

Notas do Editor

  • #3: Falem que o evento é gratuito pra todos, e que os patrocinadores são os responsáveis por garantir o coffee e a infra-estrutura basica pro evento acontecer. Em contra partida, eles querem mostrar seus produtos e serviços, é legal aos participantes conhecerem o que eles tem a oferecer e aceitar receber contatos deles via email.