SlideShare uma empresa Scribd logo
ORGANIZAÇÃO
APOIADORES
PRÓXIMOS EVENTOS
08/10 26/11
FELIPE DE ASSIS
• Database Administrator na DataEX (SP)
• Graduação em Ciência da Computação
• MBA em Arquitetura e Gestão de Infraestrutura – FIAP
• Palestrante PASS - SQL Saturdays (Brasília e Rio de Janeiro)
• MCTS, MCITP, MCSA, MCSE Data Platform e MCT
• Blog: felipedba.wordpress.com
• E-mail: felipe.assis@outlook.com
LUIZ HENRIQUE GARRETTI
• Graduado em Ciência da Computação.
• MBA em Business Intelligence - IBTA
• Pós Graduação em Gerenciamento De Banco de Dados – Unicamp.
• Palestrante PASS, Brasília e Bogotá (Colombia).
• Colunista no site Imasters e Revista SQL Magazine.
• MTA, MCTS, MCSA
• Blog www.lhgaretti.wordpress.com – Bit a Bit com SQL Server
• E-mail: luizh.rosario@gmail.com
AGENDA • BEGIN TRANSACTION
1- Introdução ao In-Memory OLTP
2- Principais conceitos
3- Arquitetura de funcionamento
4- Demonstrações
5- Resultados obtidos em Casos Reais
6- Esforço de Implementação
7- Evolução (SQL 2014 / 2016)
8- Expectativas para o futuro
9- Conclusão
• COMMIT TRANSACTION
VAMOS VER NA PRÁTICA?
DEMO TIME!
O QUE É IN-MEMORY OLTP?
Referência: https://msdn.microsoft.com/en-us/library/dn133171.aspx
DEMO
INTRODUÇÃO AO IN-MEMORY OLTP
• Funcionalidade disponível a partir do SQL Server 2014
• Processamento transacional de alta performance
• (até 100 vezes mais rápido)
• Mecanismos de funcionamento totalmente repensados
• Novo conceito de armazenamento de dados
• Novo modelo otimista de concorrência
• Pode ser implantado de forma transparente às aplicações
• Integrado com os outros principais recursos do SQL Server
CONCEITOS PRINCIPAIS
• O In-Memory OLTP é composto por:
• Novo tipo de tabela (In-Memory)
• Dois novos tipos de índices
• Novo tipo de procedure (nativamente compilada)
• Novo modelo de concorrência otimista
• Novo formato de armazenamento de dados:
• Em memória (registros ao invés de páginas)
• Em disco (checkpoint files, append-only, data e delta)
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
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')
ESTRUTURA IN-MEMORY
Filegroup Container
Create
Table DDL
Code
Generated
and
Compiled
Table DLL
is created
Table DLL
loaded in
memory
FILE IN-MEMORY
Database ID
Module Loaded
sys.dm_os_loaded_modules
Object IDTable
TABELAS EM MEMÓRIA
• Tipos de Tabela:
• SCHEMA_AND_DATA
• Mantém a estrutura (CREATE TABLE) .
• Dados são persistidos no Filegroup In-Memory.
• Constraint Primary Key requerida.
• SCHEMA_ONLY
• Mantém somente a estrutura da tabela (CREATE TABLE).
• Índice requerido.
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
Collation *BIN2 necessário no
SQL Server 2014 para colunas
indexadas tipo texto.
Na versão 2016, outros
collations são suportados, mas o
BIN ainda é ligeiramente mais
rápido.
Definição da Tabela como
Memory Optimized
Durabilidade:
SCHEMA_AND_DATA ou SCHEMA_ONLY
Índice na coluna Nome
Pré-Requisito:
PK ou 1 índice
CRIANDO TABELAS EM MEMÓRIA
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
Data
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
ARMAZENAMENTO DE DADOS DISK-BASED
ARMAZENAMENTO DE DADOS IN-MEMORY
• In-Memory OLTP não utiliza
páginas e extents
• Ao invés disso, armazena os
registros individualmente
em memória
• Índices são utilizados para
conectar registros da
mesma tabela
• Por não possuir estruturas
de páginas, não há
necessidade de latches
• Devido ao modelo otimista
de concorrência, não há
necessidade de locks
Memória
Row 1
Row 2
Row 3
Row 4
Row 5
Row 6
Row 7
Row 8
Tabela A
Tabela B
ÍNDICES TRADICIONAIS (DISK-BASED)
Conhecemos índices no SQL Server, como estruturas B-Tree...
Intermediate
LEAF LEAF LEAF LEAF LEAF
ROOT
Intermediate Intermediate Intermediate
Mas no In-Memory OLTP, os índices funcionam um pouco diferente...
Vamos ver...
RECORDS IN-MEMORY
End Ts StmIdBegin Ts IdxLinkCount
{
8 bytes
{
{4 bytes
{
2 bytes
Padding
8 bytes
KeyRow Header Payload
8 bytes * (idxLinkCount -1)
{
2 bytes
• Sem Páginas de Dados, sem extents...
TIPOS DE ÍNDICES IN-MEMORY
Recomendado para endereçar as
seguintes situações:
• Queries que recuperam registros
específicos (Lookups)
• Queries que procuram registros
usando igualdade ( = )
• Colunas com alta cardinalidade
(poucos valores repetidos)
• Usa o conceito de Hash Tables
and Hash Function
Hash Indexes Range Indexes
Mais adequado para os seguintes
cenários:
• Queries que pesquisam por
intervalos de registros
• Queries que utilizam predicados
como >, <, >=, <=, BETWEEN
• Queries onde a quantidade de
registros é desconhecida
• Usam um novo tipo de árvore
balanceada chamada Bw-Trees
A partir do SQL Server 2016, também são suportados os
Columnstore Indexes
TIPOS DE ÍNDICES – HASH INDEX
Hash Index
Coluna Nome
1
0
3
2
5
4
7
6
Neymar Ed. Fisica60, ...
Index Pointer StudentTimestamps Class
Gabigol Psicologia7, ...
Array de Ponteiros (Buckets)
Gabriel Jesus Teologia7, ...
RowChain
TIPOS DE ÍNDICES – RANGE INDEX
1
3
4
5
6
Page Mapping TabIe (Memory Addresses)
2
7
8
DG
ABCD EFG
JP
HIJ KLMNOP
GPZ
UZ
QRSTU CWXYZ
PID3 PID1 PID4
Root
PID0
0 Novo Conceito: BW-Tree
M
M
M
M
Data Rows
(Chain)
PROCEDURES NATIVAS IN-MEMORY
• T-SQL compilado em tempo de
execução.
• Acessa todas as tabelas (Disk-Based
and Memory)
• Contempla todos os comandos T-SQL
• Plano de execução estimado e real
disponíveis
Modelo Transacional In-Memory
• T-SQL compilado em DDL (C++) .
• Executado em baixo nível direto
Processador (Linguagem de Maquina)
• Acessa somente Tabelas In-Memory.
• T-SQL com limitações
• Parâmetro NATIVE_COMPILATION
• Apenas plano de execução estimado
O fluxo interno de criação de ambos os modelos seguem *praticamente* o mesmo fluxo.
CREATE PROC
DDL
(T-SQL)
In Memory
OLTP
Runtime
In Memory
OLTP
Compiler
DLL
Parser /
Algebrizer
Query
Optimizer
Query
Plan
Query
Tree
PROCEDURES NATIVAS IN-MEMORY
CREATE PROCEDURE [dbo].[InsertOrder] (@id INT, @date DATETIME)
WITH
NATIVE_COMPILATION,
SCHEMABINDING,
EXECUTE AS OWNER
AS
BEGIN ATOMIC
WITH
(TRANSACTION ISOLATION LEVEL = SNAPSHOT,
LANGUAGE = N'us_english')
-- Insert T-SQL…
Select @@Version;
END
Identifica uma Proc Nativamente
Compilada em Memoria
Requerido
Cria uma transação se
não houver nenhuma.
Caso contrário, cria
apenas um savepoint.
UTILIZAÇÃO DO TRANSACTION LOG
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 modificações
confirmadas (commit) são
registradas
• Escrita mais eficiente obtida
através de compressão
UTILIZAÇÃO DO TRANSACTION LOG
IN MEMORY
Adaptado de “SQL Server In-Memory OLTP Internals – Kalen Delaney”
DEMO
CHECKPOINT FILES - ARQUITETURA
T2
Optimized Table
SCHEMA_ONLY
T1
Optimized Table
SCHEMA_AND_DATA
In-Memory FG
Data Data
Delta Delta
IX1 IX2
Checkpoint Thread
- Checkpoint
- Log cresce 512 MB (2014)
- Log cresce 1.5 GB (2016)
Checkpoint Files
- Append Only
- Filestream (2014)
- Código Próprio (2016)
- Gerenciados em pares:
- Data Files: Inserts
- Delta Files: Deletes
- Update gerenciados como
Inserts e Deletes
CHECKPOINT FILES - FUNCIONAMENTO
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
GARBAGE COLLECTOR
• Dois tipos de Garbage Collector
• Limpeza de memória inteligente
• Feita pelos próprios processos de usuário
• Automaticamente por uma thread dedicada, acionada em um
Checkpoint manual ou quando a ocupação do Transaction Log
cresce 512 MB (2014) / 1.5 GB (2016)
• Gerenciamento dos Checkpoint Files
• Responsáveis por criar, consolidar e excluir Data/Delta Files
• Acionado pelo checkpoint ou automaticamente pelo engine
MIGRAÇÃO DISK BASED PARA MEMÓRIA
TABLE USAGE ANALYSIS
DEMO
EVOLUÇÃO SQL SERVER 2016
• Capacidade máxima de armazenamento de dados
em memória: 256 GB
• Collation BIN2 requerido para colunas do tipo
texto que precisem ser indexadas
• Foreign Keys não suportadas
• ALTER TABLE não suportado (necessário salvar os
dados, excluir a tabela e criá-la novamente)
• Índices somente em colunas com NOT NULL
• ALTER PROC não suportado
• TDE não suportado
• Somente Procedures nativamente compiladas
• Paralelismo não suportado
SQL Server 2014 SQL Server 2016
• Capacidade máxima de armazenamento de dados em
memória: 2 TB (4 TB*)
• Todos os principais collations são suportados, mas o
collation binário ainda funciona melhor
• Foreign Keys suportadas entre tabelas In-Memory
• ALTER TABLE suportado, mas apenas automatiza o
trabalho manual que era necessário no SQL Server 2014
• Índices suportados em todas as colunas
• ALTER PROC suportado
• TDE suportado
• + Triggers e functions nativamente compiladas
• Paralelismo suportado para algumas operações
http://sqlperformance.com/2015/11/sql-server-2016/in-memory-oltp-enhancements
CONSIDERAÇÕES ADICIONAIS
• Quantidade de Memória Recomendada
• 2x Volumetria dos dados
• Dados armazenados em memória
• Versionamento dos registros
• Movimentações internas dos processos do In-Memory
• Nota: Não é todo banco de dados ou aplicação que vai
se beneficiar significativemente do In-Memory OLTP
CASE – ENVIO DE SMS
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 – DIMINUIÇÃO DE FILAS
Com a implementação do In-Memory, a liberação de medicamentos
passou a ser mais rápida, diminuindo filas e impactando positivamente
o cliente final (cidadão).
O Sistema atende 864 Farmácias em todo o estado.
Aproximadamente 25 mil pacientes dia.
O “tempo média de espera” caiu de 11 minutos
para 2 minutos.
CASE – TABELA SCHEMA_ONLY
Disk
Writes/
Sec
(total)
Disk
Reads/
Sec
(total)
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%.
MAIS DÚVIDAS?
3
• Entre em contato:
Felipe
felipe.assis@outlook.com
Luiz
luizh.rosario@gmail.com
LINKS INTERESSANTES E 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
STAY INVOLVED !
• Sign up for a free membership today at sqlpass.org.
• Linked In: http://www.sqlpass.org/linkedin
• Facebook: http://www.sqlpass.org/facebook
• Twitter: @SQLPASS
• PASS: http://www.sqlpass.org

Mais conteúdo relacionado

Mais procurados

Arquitetura SQL Server
Arquitetura SQL ServerArquitetura SQL Server
Arquitetura SQL Server
Raul Oliveira
 
Banco de dados oracle
Banco de dados oracleBanco de dados oracle
Banco de dados oracle
Eduardo Lopes
 
Oracle 11g – Inteligência em Banco de Dados
Oracle 11g – Inteligência em Banco de DadosOracle 11g – Inteligência em Banco de Dados
Oracle 11g – Inteligência em Banco de Dados
Daniela Macedo
 
Apostila Oracle 10g
Apostila Oracle 10gApostila Oracle 10g
Apostila Oracle 10g
Andre Nascimento
 
Cenário das Plataformas de Dados 2017/2018
Cenário das Plataformas de Dados 2017/2018Cenário das Plataformas de Dados 2017/2018
Cenário das Plataformas de Dados 2017/2018
Raul Oliveira
 
MySQL - visão geral
MySQL - visão geralMySQL - visão geral
MySQL - visão geral
Airton Lastori
 
Oracle 11g
Oracle 11gOracle 11g
Projeto Octopus - Database Sharding para ActiveRecord
Projeto Octopus - Database Sharding para ActiveRecordProjeto Octopus - Database Sharding para ActiveRecord
Projeto Octopus - Database Sharding para ActiveRecord
tchandy
 
TechEd 2009: Planejamento e Operação de Ambientes SharePoint Multi-Terabyte
TechEd 2009: Planejamento e Operação de Ambientes SharePoint Multi-TerabyteTechEd 2009: Planejamento e Operação de Ambientes SharePoint Multi-Terabyte
TechEd 2009: Planejamento e Operação de Ambientes SharePoint Multi-Terabyte
Fabrício Catae
 
Funcionalidades Oracle
Funcionalidades OracleFuncionalidades Oracle
Funcionalidades Oracle
harlycarreiro
 
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
guest519a5b6
 
Performance no MongoDB - TDC 2017 | Florianópolis
Performance no MongoDB - TDC 2017 | FlorianópolisPerformance no MongoDB - TDC 2017 | Florianópolis
Performance no MongoDB - TDC 2017 | Florianópolis
Jefferson Martins de Andrade
 
[Webinar] Performance e otimização de banco de dados MySQL
[Webinar] Performance e otimização de banco de dados MySQL[Webinar] Performance e otimização de banco de dados MySQL
[Webinar] Performance e otimização de banco de dados MySQL
KingHost - Hospedagem de sites
 
Estudo de técnicas de persistência e acesso concorrente a ontologias
Estudo de técnicas de persistência e acesso concorrente a ontologiasEstudo de técnicas de persistência e acesso concorrente a ontologias
Estudo de técnicas de persistência e acesso concorrente a ontologias
Helio Henrique L. C. Monte-Alto
 
DBA became DMA for Oracle Exadata X2-2
DBA became DMA for Oracle Exadata X2-2DBA became DMA for Oracle Exadata X2-2
DBA became DMA for Oracle Exadata X2-2
Rodrigo Almeida
 
Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0
Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0
Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0
Marcos William Valentini
 
Oracle Exadata
Oracle ExadataOracle Exadata
Oracle Exadata
iMasters
 
Mais performance com o MySQL 5.6
Mais performance com o MySQL 5.6Mais performance com o MySQL 5.6
Mais performance com o MySQL 5.6
MySQL Brasil
 
Desvendando Oracle Exadata X2-2
Desvendando Oracle Exadata X2-2Desvendando Oracle Exadata X2-2
Desvendando Oracle Exadata X2-2
Rodrigo Almeida
 

Mais procurados (19)

Arquitetura SQL Server
Arquitetura SQL ServerArquitetura SQL Server
Arquitetura SQL Server
 
Banco de dados oracle
Banco de dados oracleBanco de dados oracle
Banco de dados oracle
 
Oracle 11g – Inteligência em Banco de Dados
Oracle 11g – Inteligência em Banco de DadosOracle 11g – Inteligência em Banco de Dados
Oracle 11g – Inteligência em Banco de Dados
 
Apostila Oracle 10g
Apostila Oracle 10gApostila Oracle 10g
Apostila Oracle 10g
 
Cenário das Plataformas de Dados 2017/2018
Cenário das Plataformas de Dados 2017/2018Cenário das Plataformas de Dados 2017/2018
Cenário das Plataformas de Dados 2017/2018
 
MySQL - visão geral
MySQL - visão geralMySQL - visão geral
MySQL - visão geral
 
Oracle 11g
Oracle 11gOracle 11g
Oracle 11g
 
Projeto Octopus - Database Sharding para ActiveRecord
Projeto Octopus - Database Sharding para ActiveRecordProjeto Octopus - Database Sharding para ActiveRecord
Projeto Octopus - Database Sharding para ActiveRecord
 
TechEd 2009: Planejamento e Operação de Ambientes SharePoint Multi-Terabyte
TechEd 2009: Planejamento e Operação de Ambientes SharePoint Multi-TerabyteTechEd 2009: Planejamento e Operação de Ambientes SharePoint Multi-Terabyte
TechEd 2009: Planejamento e Operação de Ambientes SharePoint Multi-Terabyte
 
Funcionalidades Oracle
Funcionalidades OracleFuncionalidades Oracle
Funcionalidades Oracle
 
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
 
Performance no MongoDB - TDC 2017 | Florianópolis
Performance no MongoDB - TDC 2017 | FlorianópolisPerformance no MongoDB - TDC 2017 | Florianópolis
Performance no MongoDB - TDC 2017 | Florianópolis
 
[Webinar] Performance e otimização de banco de dados MySQL
[Webinar] Performance e otimização de banco de dados MySQL[Webinar] Performance e otimização de banco de dados MySQL
[Webinar] Performance e otimização de banco de dados MySQL
 
Estudo de técnicas de persistência e acesso concorrente a ontologias
Estudo de técnicas de persistência e acesso concorrente a ontologiasEstudo de técnicas de persistência e acesso concorrente a ontologias
Estudo de técnicas de persistência e acesso concorrente a ontologias
 
DBA became DMA for Oracle Exadata X2-2
DBA became DMA for Oracle Exadata X2-2DBA became DMA for Oracle Exadata X2-2
DBA became DMA for Oracle Exadata X2-2
 
Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0
Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0
Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0
 
Oracle Exadata
Oracle ExadataOracle Exadata
Oracle Exadata
 
Mais performance com o MySQL 5.6
Mais performance com o MySQL 5.6Mais performance com o MySQL 5.6
Mais performance com o MySQL 5.6
 
Desvendando Oracle Exadata X2-2
Desvendando Oracle Exadata X2-2Desvendando Oracle Exadata X2-2
Desvendando Oracle Exadata X2-2
 

Semelhante a Otimizando a performance com in-memory no SQL 2016

Aula 06 - TEP - Introdução SQLite
Aula 06 - TEP - Introdução SQLiteAula 06 - TEP - Introdução SQLite
Aula 06 - TEP - Introdução SQLite
Anderson Fabiano Dums
 
Exadata - O Todo é maior que a soma das Partes
Exadata - O Todo é maior que a soma das PartesExadata - O Todo é maior que a soma das Partes
Exadata - O Todo é maior que a soma das Partes
Luis Marques
 
pgDay Campinas – 2015
pgDay Campinas – 2015pgDay Campinas – 2015
pgDay Campinas – 2015
Vinícius Schmidt
 
Otimizando a performance com in memory no sql 2016
Otimizando a performance com in memory no sql 2016Otimizando a performance com in memory no sql 2016
Otimizando a performance com in memory no sql 2016
Luiz Henrique Garetti Rosário
 
Interoperabilidade entre bancos de dados
Interoperabilidade entre bancos de dadosInteroperabilidade entre bancos de dados
Interoperabilidade entre bancos de dados
pichiliani
 
ClusterizaçãO De AplicaçõEs Php
ClusterizaçãO De AplicaçõEs PhpClusterizaçãO De AplicaçõEs Php
ClusterizaçãO De AplicaçõEs Php
Campus Party Brasil
 
Clusterização de Aplicações PHP
Clusterização de Aplicações PHPClusterização de Aplicações PHP
Clusterização de Aplicações PHP
ECRAYON Tecnologia Criativa
 
Oracle Exadata - Consolidação & Migração
Oracle Exadata - Consolidação & MigraçãoOracle Exadata - Consolidação & Migração
Oracle Exadata - Consolidação & Migração
Rodrigo Almeida
 
Novidades do Sql Server 2016
Novidades do Sql Server 2016Novidades do Sql Server 2016
Novidades do Sql Server 2016
Roberto Fonseca
 
PostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardoPostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardo
elliando dias
 
Mongo db
Mongo dbMongo db
Mongo db
Edmilson Neto
 
Otimizacao de websites em PHP
Otimizacao de websites em PHPOtimizacao de websites em PHP
Otimizacao de websites em PHP
Felipe Ribeiro
 
L'esprit de l'escalier
L'esprit de l'escalierL'esprit de l'escalier
L'esprit de l'escalier
Gleicon Moraes
 
Arquitetura de Memoria do PostgreSQL
Arquitetura de Memoria do PostgreSQLArquitetura de Memoria do PostgreSQL
Arquitetura de Memoria do PostgreSQL
Raul Oliveira
 
Banco de dados
Banco de dadosBanco de dados
Banco de dados
Luiz Guilherme Sucupira
 
Introdução ao MySQL 5.6
Introdução ao MySQL 5.6Introdução ao MySQL 5.6
Introdução ao MySQL 5.6
Wagner Bianchi
 
Monitorando os Recursos e Processos do Servidor, através do Power BI
Monitorando os Recursos e Processos do Servidor, através do Power BIMonitorando os Recursos e Processos do Servidor, através do Power BI
Monitorando os Recursos e Processos do Servidor, através do Power BI
Sulamita Dantas
 
Tecnologias para mineração de dados nas nuvens
Tecnologias para mineração de dados nas nuvensTecnologias para mineração de dados nas nuvens
Tecnologias para mineração de dados nas nuvens
Alessandro Binhara
 
TimesTen In-Memory Database
TimesTen In-Memory DatabaseTimesTen In-Memory Database
TimesTen In-Memory Database
Andre Danelon
 
Minicurso Epoca mongoDB
Minicurso Epoca mongoDBMinicurso Epoca mongoDB
Minicurso Epoca mongoDB
LelyBarros
 

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

Aula 06 - TEP - Introdução SQLite
Aula 06 - TEP - Introdução SQLiteAula 06 - TEP - Introdução SQLite
Aula 06 - TEP - Introdução SQLite
 
Exadata - O Todo é maior que a soma das Partes
Exadata - O Todo é maior que a soma das PartesExadata - O Todo é maior que a soma das Partes
Exadata - O Todo é maior que a soma das Partes
 
pgDay Campinas – 2015
pgDay Campinas – 2015pgDay Campinas – 2015
pgDay Campinas – 2015
 
Otimizando a performance com in memory no sql 2016
Otimizando a performance com in memory no sql 2016Otimizando a performance com in memory no sql 2016
Otimizando a performance com in memory no sql 2016
 
Interoperabilidade entre bancos de dados
Interoperabilidade entre bancos de dadosInteroperabilidade entre bancos de dados
Interoperabilidade entre bancos de dados
 
ClusterizaçãO De AplicaçõEs Php
ClusterizaçãO De AplicaçõEs PhpClusterizaçãO De AplicaçõEs Php
ClusterizaçãO De AplicaçõEs Php
 
Clusterização de Aplicações PHP
Clusterização de Aplicações PHPClusterização de Aplicações PHP
Clusterização de Aplicações PHP
 
Oracle Exadata - Consolidação & Migração
Oracle Exadata - Consolidação & MigraçãoOracle Exadata - Consolidação & Migração
Oracle Exadata - Consolidação & Migração
 
Novidades do Sql Server 2016
Novidades do Sql Server 2016Novidades do Sql Server 2016
Novidades do Sql Server 2016
 
PostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardoPostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardo
 
Mongo db
Mongo dbMongo db
Mongo db
 
Otimizacao de websites em PHP
Otimizacao de websites em PHPOtimizacao de websites em PHP
Otimizacao de websites em PHP
 
L'esprit de l'escalier
L'esprit de l'escalierL'esprit de l'escalier
L'esprit de l'escalier
 
Arquitetura de Memoria do PostgreSQL
Arquitetura de Memoria do PostgreSQLArquitetura de Memoria do PostgreSQL
Arquitetura de Memoria do PostgreSQL
 
Banco de dados
Banco de dadosBanco de dados
Banco de dados
 
Introdução ao MySQL 5.6
Introdução ao MySQL 5.6Introdução ao MySQL 5.6
Introdução ao MySQL 5.6
 
Monitorando os Recursos e Processos do Servidor, através do Power BI
Monitorando os Recursos e Processos do Servidor, através do Power BIMonitorando os Recursos e Processos do Servidor, através do Power BI
Monitorando os Recursos e Processos do Servidor, através do Power BI
 
Tecnologias para mineração de dados nas nuvens
Tecnologias para mineração de dados nas nuvensTecnologias para mineração de dados nas nuvens
Tecnologias para mineração de dados nas nuvens
 
TimesTen In-Memory Database
TimesTen In-Memory DatabaseTimesTen In-Memory Database
TimesTen In-Memory Database
 
Minicurso Epoca mongoDB
Minicurso Epoca mongoDBMinicurso Epoca mongoDB
Minicurso Epoca mongoDB
 

Mais de Luiz Henrique Garetti Rosário

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

Mais de Luiz Henrique Garetti Rosário (14)

Streaming architecture with big data clusters
Streaming architecture with big data clustersStreaming architecture with big data clusters
Streaming architecture with big data clusters
 
TDC - Planejando data Lake com big data clusters
TDC - Planejando data Lake com big data clustersTDC - Planejando data Lake com big data clusters
TDC - Planejando data Lake com big data clusters
 
SQL SAT Salvador - Arquitetando Data Lake Multicloud
SQL SAT Salvador - Arquitetando Data Lake MulticloudSQL SAT Salvador - Arquitetando Data Lake Multicloud
SQL SAT Salvador - Arquitetando Data Lake Multicloud
 
Meetup - Data Lake
Meetup - Data LakeMeetup - Data Lake
Meetup - Data Lake
 
Imasters - HA e DR como seguro de vida do DBA
Imasters - HA e DR como seguro de vida do DBAImasters - HA e DR como seguro de vida do DBA
Imasters - HA e DR como seguro de vida do DBA
 
Meetup Tivir - Big Data Clusters
Meetup Tivir - Big Data ClustersMeetup Tivir - Big Data Clusters
Meetup Tivir - Big Data Clusters
 
Sql maniacs sql server 2019 Big Data Clusters
Sql maniacs   sql server 2019 Big Data ClustersSql maniacs   sql server 2019 Big Data Clusters
Sql maniacs sql server 2019 Big Data Clusters
 
Sql saturday joinville 2019 sql server 2019 Big Data Clustes
Sql saturday  joinville 2019   sql server 2019 Big Data ClustesSql saturday  joinville 2019   sql server 2019 Big Data Clustes
Sql saturday joinville 2019 sql server 2019 Big Data Clustes
 
SQL Saturday SP - SQL Server 2019 Big Data Clusters
SQL Saturday SP - SQL Server 2019 Big Data ClustersSQL Saturday SP - SQL Server 2019 Big Data Clusters
SQL Saturday SP - SQL Server 2019 Big Data Clusters
 
SQL Maniacs - SQL Server 2019 Big Data Clusters
SQL Maniacs - SQL Server 2019 Big Data ClustersSQL Maniacs - SQL Server 2019 Big Data Clusters
SQL Maniacs - SQL Server 2019 Big Data Clusters
 
Sql server 2019 big data cluster
Sql server 2019 big data clusterSql server 2019 big data cluster
Sql server 2019 big data cluster
 
High Availability and Disaster Recovery salvando vidas
High Availability and Disaster Recovery salvando vidasHigh Availability and Disaster Recovery salvando vidas
High Availability and Disaster Recovery salvando vidas
 
High availability e Disaster Recovery é o seguro de vida de todo DBA
High availability e Disaster Recovery é o seguro de vida de todo DBAHigh availability e Disaster Recovery é o seguro de vida de todo DBA
High availability e Disaster Recovery é o seguro de vida de todo DBA
 
Escovando bit com alwayson sql server 2014
Escovando bit com alwayson sql server 2014Escovando bit com alwayson sql server 2014
Escovando bit com alwayson sql server 2014
 

Último

Logica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptxLogica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptx
Momento da Informática
 
História da Rádio- 1936-1970 século XIX .2.pptx
História da Rádio- 1936-1970 século XIX   .2.pptxHistória da Rádio- 1936-1970 século XIX   .2.pptx
História da Rádio- 1936-1970 século XIX .2.pptx
TomasSousa7
 
ATIVIDADE 1 - ADSIS - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ADSIS - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ADSIS - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ADSIS - ESTRUTURA DE DADOS II - 52_2024.docx
2m Assessoria
 
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdfEscola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
Gabriel de Mattos Faustino
 
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdfTOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
Momento da Informática
 
Manual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdfManual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdf
WELITONNOGUEIRA3
 
Segurança Digital Pessoal e Boas Práticas
Segurança Digital Pessoal e Boas PráticasSegurança Digital Pessoal e Boas Práticas
Segurança Digital Pessoal e Boas Práticas
Danilo Pinotti
 
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
Faga1939
 
DESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdf
DESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdfDESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdf
DESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdf
Momento da Informática
 
Certificado Jornada Python Da Hashtag.pdf
Certificado Jornada Python Da Hashtag.pdfCertificado Jornada Python Da Hashtag.pdf
Certificado Jornada Python Da Hashtag.pdf
joaovmp3
 

Último (10)

Logica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptxLogica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptx
 
História da Rádio- 1936-1970 século XIX .2.pptx
História da Rádio- 1936-1970 século XIX   .2.pptxHistória da Rádio- 1936-1970 século XIX   .2.pptx
História da Rádio- 1936-1970 século XIX .2.pptx
 
ATIVIDADE 1 - ADSIS - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ADSIS - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ADSIS - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ADSIS - ESTRUTURA DE DADOS II - 52_2024.docx
 
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdfEscola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
 
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdfTOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
 
Manual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdfManual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdf
 
Segurança Digital Pessoal e Boas Práticas
Segurança Digital Pessoal e Boas PráticasSegurança Digital Pessoal e Boas Práticas
Segurança Digital Pessoal e Boas Práticas
 
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
 
DESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdf
DESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdfDESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdf
DESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdf
 
Certificado Jornada Python Da Hashtag.pdf
Certificado Jornada Python Da Hashtag.pdfCertificado Jornada Python Da Hashtag.pdf
Certificado Jornada Python Da Hashtag.pdf
 

Otimizando a performance com in-memory no SQL 2016

  • 1.
  • 5. FELIPE DE ASSIS • Database Administrator na DataEX (SP) • Graduação em Ciência da Computação • MBA em Arquitetura e Gestão de Infraestrutura – FIAP • Palestrante PASS - SQL Saturdays (Brasília e Rio de Janeiro) • MCTS, MCITP, MCSA, MCSE Data Platform e MCT • Blog: felipedba.wordpress.com • E-mail: felipe.assis@outlook.com
  • 6. LUIZ HENRIQUE GARRETTI • Graduado em Ciência da Computação. • MBA em Business Intelligence - IBTA • Pós Graduação em Gerenciamento De Banco de Dados – Unicamp. • Palestrante PASS, Brasília e Bogotá (Colombia). • Colunista no site Imasters e Revista SQL Magazine. • MTA, MCTS, MCSA • Blog www.lhgaretti.wordpress.com – Bit a Bit com SQL Server • E-mail: luizh.rosario@gmail.com
  • 7. AGENDA • BEGIN TRANSACTION 1- Introdução ao In-Memory OLTP 2- Principais conceitos 3- Arquitetura de funcionamento 4- Demonstrações 5- Resultados obtidos em Casos Reais 6- Esforço de Implementação 7- Evolução (SQL 2014 / 2016) 8- Expectativas para o futuro 9- Conclusão • COMMIT TRANSACTION
  • 8. VAMOS VER NA PRÁTICA? DEMO TIME! O QUE É IN-MEMORY OLTP? Referência: https://msdn.microsoft.com/en-us/library/dn133171.aspx DEMO
  • 9. INTRODUÇÃO AO IN-MEMORY OLTP • Funcionalidade disponível a partir do SQL Server 2014 • Processamento transacional de alta performance • (até 100 vezes mais rápido) • Mecanismos de funcionamento totalmente repensados • Novo conceito de armazenamento de dados • Novo modelo otimista de concorrência • Pode ser implantado de forma transparente às aplicações • Integrado com os outros principais recursos do SQL Server
  • 10. CONCEITOS PRINCIPAIS • O In-Memory OLTP é composto por: • Novo tipo de tabela (In-Memory) • Dois novos tipos de índices • Novo tipo de procedure (nativamente compilada) • Novo modelo de concorrência otimista • Novo formato de armazenamento de dados: • Em memória (registros ao invés de páginas) • Em disco (checkpoint files, append-only, data e delta)
  • 11. 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
  • 12. 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') ESTRUTURA IN-MEMORY Filegroup Container Create Table DDL Code Generated and Compiled Table DLL is created Table DLL loaded in memory
  • 13. FILE IN-MEMORY Database ID Module Loaded sys.dm_os_loaded_modules Object IDTable
  • 14. TABELAS EM MEMÓRIA • Tipos de Tabela: • SCHEMA_AND_DATA • Mantém a estrutura (CREATE TABLE) . • Dados são persistidos no Filegroup In-Memory. • Constraint Primary Key requerida. • SCHEMA_ONLY • Mantém somente a estrutura da tabela (CREATE TABLE). • Índice requerido.
  • 15. 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 Collation *BIN2 necessário no SQL Server 2014 para colunas indexadas tipo texto. Na versão 2016, outros collations são suportados, mas o BIN ainda é ligeiramente mais rápido. Definição da Tabela como Memory Optimized Durabilidade: SCHEMA_AND_DATA ou SCHEMA_ONLY Índice na coluna Nome Pré-Requisito: PK ou 1 índice CRIANDO TABELAS EM MEMÓRIA
  • 16. 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 Data 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 ARMAZENAMENTO DE DADOS DISK-BASED
  • 17. ARMAZENAMENTO DE DADOS IN-MEMORY • In-Memory OLTP não utiliza páginas e extents • Ao invés disso, armazena os registros individualmente em memória • Índices são utilizados para conectar registros da mesma tabela • Por não possuir estruturas de páginas, não há necessidade de latches • Devido ao modelo otimista de concorrência, não há necessidade de locks Memória Row 1 Row 2 Row 3 Row 4 Row 5 Row 6 Row 7 Row 8 Tabela A Tabela B
  • 18. ÍNDICES TRADICIONAIS (DISK-BASED) Conhecemos índices no SQL Server, como estruturas B-Tree... Intermediate LEAF LEAF LEAF LEAF LEAF ROOT Intermediate Intermediate Intermediate Mas no In-Memory OLTP, os índices funcionam um pouco diferente... Vamos ver...
  • 19. RECORDS IN-MEMORY End Ts StmIdBegin Ts IdxLinkCount { 8 bytes { {4 bytes { 2 bytes Padding 8 bytes KeyRow Header Payload 8 bytes * (idxLinkCount -1) { 2 bytes • Sem Páginas de Dados, sem extents...
  • 20. TIPOS DE ÍNDICES IN-MEMORY Recomendado para endereçar as seguintes situações: • Queries que recuperam registros específicos (Lookups) • Queries que procuram registros usando igualdade ( = ) • Colunas com alta cardinalidade (poucos valores repetidos) • Usa o conceito de Hash Tables and Hash Function Hash Indexes Range Indexes Mais adequado para os seguintes cenários: • Queries que pesquisam por intervalos de registros • Queries que utilizam predicados como >, <, >=, <=, BETWEEN • Queries onde a quantidade de registros é desconhecida • Usam um novo tipo de árvore balanceada chamada Bw-Trees A partir do SQL Server 2016, também são suportados os Columnstore Indexes
  • 21. TIPOS DE ÍNDICES – HASH INDEX Hash Index Coluna Nome 1 0 3 2 5 4 7 6 Neymar Ed. Fisica60, ... Index Pointer StudentTimestamps Class Gabigol Psicologia7, ... Array de Ponteiros (Buckets) Gabriel Jesus Teologia7, ... RowChain
  • 22. TIPOS DE ÍNDICES – RANGE INDEX 1 3 4 5 6 Page Mapping TabIe (Memory Addresses) 2 7 8 DG ABCD EFG JP HIJ KLMNOP GPZ UZ QRSTU CWXYZ PID3 PID1 PID4 Root PID0 0 Novo Conceito: BW-Tree M M M M Data Rows (Chain)
  • 23. PROCEDURES NATIVAS IN-MEMORY • T-SQL compilado em tempo de execução. • Acessa todas as tabelas (Disk-Based and Memory) • Contempla todos os comandos T-SQL • Plano de execução estimado e real disponíveis Modelo Transacional In-Memory • T-SQL compilado em DDL (C++) . • Executado em baixo nível direto Processador (Linguagem de Maquina) • Acessa somente Tabelas In-Memory. • T-SQL com limitações • Parâmetro NATIVE_COMPILATION • Apenas plano de execução estimado O fluxo interno de criação de ambos os modelos seguem *praticamente* o mesmo fluxo. CREATE PROC DDL (T-SQL) In Memory OLTP Runtime In Memory OLTP Compiler DLL Parser / Algebrizer Query Optimizer Query Plan Query Tree
  • 24. PROCEDURES NATIVAS IN-MEMORY CREATE PROCEDURE [dbo].[InsertOrder] (@id INT, @date DATETIME) WITH NATIVE_COMPILATION, SCHEMABINDING, EXECUTE AS OWNER AS BEGIN ATOMIC WITH (TRANSACTION ISOLATION LEVEL = SNAPSHOT, LANGUAGE = N'us_english') -- Insert T-SQL… Select @@Version; END Identifica uma Proc Nativamente Compilada em Memoria Requerido Cria uma transação se não houver nenhuma. Caso contrário, cria apenas um savepoint.
  • 25. UTILIZAÇÃO DO TRANSACTION LOG 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 modificações confirmadas (commit) são registradas • Escrita mais eficiente obtida através de compressão
  • 26. UTILIZAÇÃO DO TRANSACTION LOG IN MEMORY Adaptado de “SQL Server In-Memory OLTP Internals – Kalen Delaney” DEMO
  • 27. CHECKPOINT FILES - ARQUITETURA T2 Optimized Table SCHEMA_ONLY T1 Optimized Table SCHEMA_AND_DATA In-Memory FG Data Data Delta Delta IX1 IX2 Checkpoint Thread - Checkpoint - Log cresce 512 MB (2014) - Log cresce 1.5 GB (2016) Checkpoint Files - Append Only - Filestream (2014) - Código Próprio (2016) - Gerenciados em pares: - Data Files: Inserts - Delta Files: Deletes - Update gerenciados como Inserts e Deletes
  • 28. CHECKPOINT FILES - FUNCIONAMENTO 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
  • 29. GARBAGE COLLECTOR • Dois tipos de Garbage Collector • Limpeza de memória inteligente • Feita pelos próprios processos de usuário • Automaticamente por uma thread dedicada, acionada em um Checkpoint manual ou quando a ocupação do Transaction Log cresce 512 MB (2014) / 1.5 GB (2016) • Gerenciamento dos Checkpoint Files • Responsáveis por criar, consolidar e excluir Data/Delta Files • Acionado pelo checkpoint ou automaticamente pelo engine
  • 30. MIGRAÇÃO DISK BASED PARA MEMÓRIA
  • 32. EVOLUÇÃO SQL SERVER 2016 • Capacidade máxima de armazenamento de dados em memória: 256 GB • Collation BIN2 requerido para colunas do tipo texto que precisem ser indexadas • Foreign Keys não suportadas • ALTER TABLE não suportado (necessário salvar os dados, excluir a tabela e criá-la novamente) • Índices somente em colunas com NOT NULL • ALTER PROC não suportado • TDE não suportado • Somente Procedures nativamente compiladas • Paralelismo não suportado SQL Server 2014 SQL Server 2016 • Capacidade máxima de armazenamento de dados em memória: 2 TB (4 TB*) • Todos os principais collations são suportados, mas o collation binário ainda funciona melhor • Foreign Keys suportadas entre tabelas In-Memory • ALTER TABLE suportado, mas apenas automatiza o trabalho manual que era necessário no SQL Server 2014 • Índices suportados em todas as colunas • ALTER PROC suportado • TDE suportado • + Triggers e functions nativamente compiladas • Paralelismo suportado para algumas operações http://sqlperformance.com/2015/11/sql-server-2016/in-memory-oltp-enhancements
  • 33. CONSIDERAÇÕES ADICIONAIS • Quantidade de Memória Recomendada • 2x Volumetria dos dados • Dados armazenados em memória • Versionamento dos registros • Movimentações internas dos processos do In-Memory • Nota: Não é todo banco de dados ou aplicação que vai se beneficiar significativemente do In-Memory OLTP
  • 34. CASE – ENVIO DE SMS 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.
  • 35. CASE – DIMINUIÇÃO DE FILAS Com a implementação do In-Memory, a liberação de medicamentos passou a ser mais rápida, diminuindo filas e impactando positivamente o cliente final (cidadão). O Sistema atende 864 Farmácias em todo o estado. Aproximadamente 25 mil pacientes dia. O “tempo média de espera” caiu de 11 minutos para 2 minutos.
  • 36. CASE – TABELA SCHEMA_ONLY Disk Writes/ Sec (total) Disk Reads/ Sec (total) 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%.
  • 37. MAIS DÚVIDAS? 3 • Entre em contato: Felipe felipe.assis@outlook.com Luiz luizh.rosario@gmail.com
  • 38. LINKS INTERESSANTES E 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
  • 39. STAY INVOLVED ! • Sign up for a free membership today at sqlpass.org. • Linked In: http://www.sqlpass.org/linkedin • Facebook: http://www.sqlpass.org/facebook • Twitter: @SQLPASS • PASS: http://www.sqlpass.org