In-Memory Database Internals DPB304
In-Memory Database Internals Alberto Lima Senior Premier Field Engineer-SQL Server allima@microsoft.com Frederico Guimarães Santos Premier Field Engineer SQL Server fredguis@microsoft.com
Tendência de Hardware Tendência de Hardware Aumento de Processadores CPU Clock estável. Tendência nos ambientes OLTP Aumento throughput Baixa latencia Alta concorrência
In-Memory Introdução Dados sempre em Memória In-Memory não é PINTABLE Estrutura de dados totalmente nova Alta concorência Não utiliza o conceito de páginas Lock e LATCH Free Novo modo de concorrência pra controle de transações. Native Compiled Store Procedure Menos instruções de CPU Store Procedure Compilada em Código Nativo.
Throughput (TPS) Performance Contenção por Latch Página de 8K em Memória T1 - Writer T2 - Writer T3 - Reader Number of threads Identity incremental 5
Performance Contenção por Latch 6
Throughput (TPS) In-Memory - Estrutura BUCKETS de 8k Hash Index Nome 000 Silas Colunas Gentile Colunas Fred Colunas Marcio Colunas Alberto Colunas Dados espalhados pela Memória Função de HASH embutida Number of threads 7
In-Memory Native Compilation CREATE TABLE DDL Code generation and compilation Table DLL produced Table DLL loaded
In-Memory Native Compilation Faz parte do processo do SQLSevr.exe
In-Memory Native Compilation In-Memory não é PINTABLE Estrutura de dados totalmente nova Não utiliza o conceito de páginas Lock e LATCH Free Novo modo de concorrência pra controle de transações. Menos instruções de CPU Store Procedure Compilada em Código Nativo.
In-Memory Indexes Hash Index Nome f(alberto) f(fabricio) f(fred) 0 1 2 3 4 5 6 7 8 9 Timestamps Chain ptrs 100: INSERT (Alberto, São Paulo) Nome Cidade 100, Alberto São Paulo Payload 150, Fabricio São Paulo Payload 250, Fred Campinas Payload 150: INSERT (Fabricio, São Paulo) 250: INSERT (Fred, Campinas) f(são Paulo) f(campinas) Hash Index Cidade 0 1 2 3 4 5 6 7 8 9 11
In-Memory Indexes Hash Index Nome f(alberto) f(fabricio) f(fred) 0 1 2 3 4 5 6 7 8 9 Timestamps Chain ptrs Nome Cidade 100, Alberto São Paulo Payload 150, 300 Fabricio São Paulo Payload 300: UPDATE (Fabricio, São Paulo) para (Fabricio,Campinas) f(são Paulo) 300, Fabricio Campinas Payload 250, Fred Campinas Payload f(campinas) Hash Index Cidade 0 1 2 3 4 5 6 7 8 9 12
In-Memory Indexes f(alberto) Hash Index Nome (Fabricio) f(fred) 0 1 2 3 4 5 6 7 8 9 Timestamps Chain ptrs Nome Cidade 100, Alberto São Paulo Payload 150, 300 Fabricio São Paulo Payload 250, 400 Fred Campinas Payload 400: DELETE (Fred, Campinas) f(são Paulo) 300, Fabricio Campinas Payload f(campinas) Hash Index Cidade 0 1 2 3 4 5 6 7 8 9 13
In-Memory Indexes Hash Index Nome f(alberto) (Fabricio) f(fred) 0 1 2 3 4 5 6 7 8 9 Timestamps Chain ptrs Nome Cidade 100, Alberto São Paulo Payload 150, 300 Fabricio São Paulo Payload 300, Fabricio Campinas Payload 250, 400 Fred Campinas Payload 500: Garbage Collection Hash Index Cidade 0 1 2 3 4 5 6 7 8 9 14
Hash Index - Tips Index Non-Clustered Hash na tabela CLIENTE ( CIDADE, ESTADO ) Hash Index é diferente portanto pense diferente SELECT COD_CLIENTE, TELEFONE, CEP, CIDADE, ESTADO FROM CLIENTE WHERE CIDADE = 'SAO PAULO' Buckets counts = 1-2 Quantidade de registros distintos! Muitos Buckets = SCANs mais lentos. Poucos Buckets = Colision e Lentidão dobrada
Non-Clustered Index Non-Clustered Range Index Page Mapping Table 0 PAGE 1 PAGE 2 3 Physical PageID-3 Root 10 20 28 Não tem latch para atualização de Páginas Não tem in-place updates nas páginas de Index Page size- up até 8K. Indice somente em uma direção Só o ID do indice no left level PageID-0 PageID-5 4 8 10 11 15 18 21 24 27 Non-leaf pages PageID-6 Logical PageID-15 1 2 4 5 6 7 25 26 27 Leaf pages 14 15 200, 1 50, 300 2 100, 200 1 Key Key Data rows
Demo
In-Memory Melhorias - SQL Server 2016 Usa até 4 sockets Tabelas em memória de 2TB Suporte a TDE Suporte a DML triggers - AFTER Sem limitação a uso de dados do tipo LOB Faz uso de Paralelismo
In-Memory What is New SQL Server 2016 ALTER PROC and sp_recompile supported Online ALTER TABLE for schema and index changes Full schema change support: add/alter/drop column/constraint FOREIGN KEY CHECK UNIQUE constraints and indexes Index operations ALTER TABLE is an offline operation; requires 2X memory Sem necessidade de BIN2 Collation para Hash Indexes (Performance)
In-Memory What is New SQL Server 2016 LEFT RIGHT} OUTER JOIN Disjunction (OR, NOT) UNION [ALL] SELECT DISTINCT Subqueries (EXISTS, IN, scalar)
In-Memory Storage Transaction Logging Hash Tabelas In-Memory Agrupa 24KB em um único registro Commit Only Não grava alteração nos Indexes Considere Lazy Commit SCHEMA_ONLY Log File Disco lento WAIT_TYPE = WRITE_LOG Use SSD
Checkpoint File Pair In-Memory Storage 0 100 Data File Transaction Timestamp Range TS (ins) RowId TableId Row pay load TS (ins) RowId TableId TS (ins) RowId TableId Row pay load Row pay load Data File contém as linhas dentro de um range específico. Delta File TS (ins) RowId TS (del) TS (ins) RowId TS (del) TS (ins) RowId TS (del) Delta File contém as linha deletadas dentro de um range específico.
In-Memory Storage Data/Delta Files Tabelas In-Memory Hash 100-200 Memory-optimized data Filegroup 201-300 301-400 DELETE APENAS INSERE O ID NO DELTA FILE INSERTS Log File ~ 1GB
In-Memory Storage SQL Server 2014 Tamanho máximo de tabelas duráveis é de até 512 GB Tamanho limitado devido a quantidade de pares (Data / Delta Files) 256GB Processo de checkpoint independente para tabelas In-memory e tabelas em disco SQL Server 2016 Suporta tabelas de até 2TB Limite pode ser extendido com adição de mais memória no Servidor
In-Memory Storage Merge Operation Memory Optimize Filegroup 100-200 201-300 301-400 401-500 201-400 501-600 60% 40% Required for Backup/HA= É necessário rodar o Backup
In-Memory What s is New SQL Server 2014 Desafio: Storage para linhas excluídas para ser Garbage Colleted SQL Server 2016 Gerenciamento de armazenamento é desacoplada do FileStream. Arquivo não utilizado (s) pode ser re-utilizado imediatamente após eles são referenciados do log de transações
Offline Checkpoint Thread SQL 2014 ~ 1GB Offline Checkpoint Thread Log 100-200 201-300 301-400 Memory-optimized data Filegroup SQL Server 2014 Limitação: Escalando acima de > (2 socket/64-cores)
Offline Checkpoint Thread SQL 2016 ~ 1GB Offline Checkpoint Thread One Thread per container Log Offline Checkpoint Thread 100-200 201-300 301-400 Offline Checkpoint Thread SQL Server 2016 Memory-optimized data Filegroup
Evento de encerramento do Microsoft Insights Week com Satya Nadella, CEO da Microsoft. Dia 29 de setembro AMCHAM - Rua da Paz 1431 Chácara Santo Antônio - SP Para se inscrever: http://aka.ms/satyabr
Q&A Visite o espaço Ask the Experts, próximo dos expositores
Continue sua capacitação Microsoft Virtual Academy http://aka.ms/ch9 http://aka.ms/mva