O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.
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...
LUIZ HENRIQUE GARRETTI
• Graduado em Ciência da Computação.
• MBA em Business Intelligence - IBTA
• Pós Graduação em Geren...
AGENDA • BEGIN TRANSACTION
1- Introdução ao In-Memory OLTP
2- Principais conceitos
3- Arquitetura de funcionamento
4- Demo...
VAMOS VER NA PRÁTICA?
DEMO TIME!
O QUE É IN-MEMORY OLTP?
Referência: https://msdn.microsoft.com/en-us/library/dn133171.asp...
INTRODUÇÃO AO IN-MEMORY OLTP
• Funcionalidade disponível a partir do SQL Server 2014
• Processamento transacional de alta ...
CONCEITOS PRINCIPAIS
• O In-Memory OLTP é composto por:
• Novo tipo de tabela (In-Memory)
• Dois novos tipos de índices
• ...
OVERVIEW DA ARQUITETURA
DatafileLogfileIn-Memory FG
tabelas e índices in-memory query
interop
tabelas e índices disk-
base...
CREATE DATABASE [Corporativo]
ON PRIMARY
(NAME = N‘Copor1',FILENAME = N'C:DataCoporrativo1.mdf'),
FILEGROUP [Hekaton_InMem...
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 F...
CREATE TABLE Example01_Data
(
Codigo INT NOT NULL IDENTITY,
Nome VARCHAR(100) COLLATE Latin1_General_100_BIN2 NOT NULL,
Da...
Buffer Cache
Data
Page
8KB
Data
Page
8KB
Index
Page
8KB
Buffer Buffer Buffer
Data
Page
8KB
Data
Page
8KB
Index
Page
8KB
Bu...
ARMAZENAMENTO DE DADOS IN-MEMORY
• In-Memory OLTP não utiliza
páginas e extents
• Ao invés disso, armazena os
registros in...
ÍNDICES TRADICIONAIS (DISK-BASED)
Conhecemos índices no SQL Server, como estruturas B-Tree...
Intermediate
LEAF LEAF LEAF ...
RECORDS IN-MEMORY
End Ts StmIdBegin Ts IdxLinkCount
{
8 bytes
{
{4 bytes
{
2 bytes
Padding
8 bytes
KeyRow Header Payload
8...
TIPOS DE ÍNDICES IN-MEMORY
Recomendado para endereçar as
seguintes situações:
• Queries que recuperam registros
específico...
TIPOS DE ÍNDICES – HASH INDEX
Hash Index
Coluna Nome
1
0
3
2
5
4
7
6
Neymar Ed. Fisica60, ...
Index Pointer StudentTimesta...
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
QRST...
PROCEDURES NATIVAS IN-MEMORY
• T-SQL compilado em tempo de
execução.
• Acessa todas as tabelas (Disk-Based
and Memory)
• C...
PROCEDURES NATIVAS IN-MEMORY
CREATE PROCEDURE [dbo].[InsertOrder] (@id INT, @date DATETIME)
WITH
NATIVE_COMPILATION,
SCHEM...
UTILIZAÇÃO DO TRANSACTION LOG
Transaction Log
T1 IX1 T2 IX2
UPDATE Example01
SET Descricao = 'Novo Valor'
WHERE Codigo = 1...
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
De...
CHECKPOINT FILES - FUNCIONAMENTO
Codigo Nome Disciplina
1 Neymar Ed. Física
Memória
Checkpoint
Files
(Disco)
2 Gabriel Jes...
GARBAGE COLLECTOR
• Dois tipos de Garbage Collector
• Limpeza de memória inteligente
• Feita pelos próprios processos de u...
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 ...
CONSIDERAÇÕES ADICIONAIS
• Quantidade de Memória Recomendada
• 2x Volumetria dos dados
• Dados armazenados em memória
• Ve...
CASE – ENVIO DE SMS
Após mudar a arquitetura para utilizar in-memory (em uma
implementação conhecida como Shock Absorber) ...
CASE – DIMINUIÇÃO DE FILAS
Com a implementação do In-Memory, a liberação de medicamentos
passou a ser mais rápida, diminui...
CASE – TABELA SCHEMA_ONLY
Disk
Writes/
Sec
(total)
Disk
Reads/
Sec
(total)
Procedure
de Insert
AVG Time
(2 Sessões paralel...
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/kal...
STAY INVOLVED !
• Sign up for a free membership today at sqlpass.org.
• Linked In: http://www.sqlpass.org/linkedin
• Faceb...
Otimizando a performance com in-memory no SQL 2016
Próximos SlideShares
Carregando em…5
×

Otimizando a performance com in-memory no SQL 2016

13 visualizações

Publicada em

Apresentação sobre SQL Server 2016 - Inmemory.
Conceito e Pratica

Publicada em: Tecnologia
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Otimizando a performance com in-memory no SQL 2016

  1. 1. ORGANIZAÇÃO
  2. 2. APOIADORES
  3. 3. PRÓXIMOS EVENTOS 08/10 26/11
  4. 4. 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
  5. 5. 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
  6. 6. 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
  7. 7. VAMOS VER NA PRÁTICA? DEMO TIME! O QUE É IN-MEMORY OLTP? Referência: https://msdn.microsoft.com/en-us/library/dn133171.aspx DEMO
  8. 8. 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
  9. 9. 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)
  10. 10. 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
  11. 11. 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
  12. 12. FILE IN-MEMORY Database ID Module Loaded sys.dm_os_loaded_modules Object IDTable
  13. 13. 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.
  14. 14. 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
  15. 15. 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
  16. 16. 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
  17. 17. Í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...
  18. 18. 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...
  19. 19. 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
  20. 20. 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
  21. 21. 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)
  22. 22. 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
  23. 23. 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.
  24. 24. 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
  25. 25. UTILIZAÇÃO DO TRANSACTION LOG IN MEMORY Adaptado de “SQL Server In-Memory OLTP Internals – Kalen Delaney” DEMO
  26. 26. 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
  27. 27. 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
  28. 28. 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
  29. 29. MIGRAÇÃO DISK BASED PARA MEMÓRIA
  30. 30. TABLE USAGE ANALYSIS DEMO
  31. 31. 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
  32. 32. 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
  33. 33. 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.
  34. 34. 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.
  35. 35. 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%.
  36. 36. MAIS DÚVIDAS? 3 • Entre em contato: Felipe felipe.assis@outlook.com Luiz luizh.rosario@gmail.com
  37. 37. 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
  38. 38. 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

×