A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

SQL Saturday #573 – Brasília 2016

Apresentações semelhantes


Apresentação em tema: "SQL Saturday #573 – Brasília 2016"— Transcrição da apresentação:

1 SQL Saturday #573 – Brasília 2016
Entendendo as diferenças entre Índices Rowstore e Columnstore Felipe de Assis @felipespas | DataEX

2 Patrocinadores Importante: Os patrocinadores são os responsáveis pelo acontecimento do evento, Por favor reforcem aqui a importância dos mesmos, e incentivem que os participantes visitem seus stands e vejam o que tem a oferecer, além de aceitar seus contados via .

3 Speaker Bio Felipe de Assis Consultor SQL Server na DataEX (SP)
DBA desde 2009 @felipespas

4 Expectativas Objetivo: Apresentar os principais conceitos e diferenças do índice Columnstore em relação aos índices tradicionais (Rowstore ou B-Trees) Nível: básico ~ intermediário Requisitos: Entendimento básico de banco de dados Gostar de banco de dados Gostar de SQL Server

5 Agenda Introdução Armazenamento de Dados Otimização de Performance
Evolução dos Columnstore Indexes Conclusão

6 Introdução aos Índices Columnstore
Tipo de índice introduzido no SQL Server 2012 Conceitos diferentes em relação aos tradicionais índices B-Tree Recomendável para otimizar a performance de queries “IO-bound” Indicável para tabelas com grande volume de dados e com maior incidência de leituras

7 Armazenamento de dados
Índices Rowstore vs Columnstore

8 Tabelas Heap (sem qualquer índice)
Dados armazenados em páginas de dados aleatoriamente, conforme disponibilidade informada pelas páginas PFS, GAM e SGAM Páginas IAM (Index Allocation Map) mapeiam quais páginas pertencem a mesma tabela Data Page Data Page Data Page Data Page Data Page Data Page IAM Page

9 Índices Clustered (Rowstore)
Dados armazenados em páginas de dados e organizados conforme a chave do índice clustered e também através de uma B-Tree Páginas IAM exercem a mesma função (heaps) Index Pages permitem navegação para acessar o registro desejado mais facilmente (seek)

10 Índices Clustered (Rowstore)
IndexPage Index Page Index Page IAM Page Data Page Data Page Data Page Data Page Data Page Data Page IAM Page

11 Heap + Índice Nonclustered (Rowstore)
IndexPage IAM Page Index Page Index Page Índice Nonclustered Index Page Index Page Index Page Index Page IAM Page Tabela Heap Data Page Data Page Data Page Data Page Data Page Data Page IAM Page

12 Clustered + Índice Nonclustered (Rowstore)
IndexPage IAM Page Index Page Index Page Índice Nonclustered Index Page Index Page Index Page Index Page IAM Page IndexPage Index Page Index Page IAM Page Índice Clustered Tabela Data Page Data Page Data Page Data Page Data Page Data Page IAM Page

13 Índices Tradicionais B-Tree
Leitura de dados através dos registros ProductID Name ProductNumber MakeFlag 1 Adjustable Race AR-5381 2 Bearing Ball BA-8327 3 BB Ball Bearing BE-2349 4 Headset Ball Bearings BE-2908 316 Blade BL-2036 317 LL Crankarm CA-5965 318 ML Crankarm CA-6738

14 Índices Columnstore / DBs colunares
Leitura de dados através das colunas ProductID Name ProductNumber MakeFlag 1 Adjustable Race AR-5381 2 Bearing Ball BA-8327 3 BB Ball Bearing BE-2349 4 Headset Ball Bearings BE-2908 316 Blade BL-2036 317 LL Crankarm CA-5965 318 ML Crankarm CA-6738

15 Índices Columnstore: Ponto de vista lógico
ProductID 1 2 3 4 316 317 318 Name Adjustable Race Bearing Ball BB Ball Bearing Headset Ball Bearings Blade LL Crankarm ML Crankarm ProductNumber AR-5381 BA-8327 BE-2349 BE-2908 BL-2036 CA-5965 CA-6738 MakeFlag 1 Rowgroup Segments

16 Índices Columnstore: Ponto de vista físico
ProductID Name ProductNumber MakeFlag IAM Page LOB Page LOB Page LOB Page LOB Page LOB Page LOB Page LOB Page Segment IAM Page LOB Page LOB Page LOB Page LOB Page LOB Page LOB Page LOB Page IAM Page LOB Page LOB Page LOB Page LOB Page LOB Page LOB Page LOB Page Até 1 milhão de registros Rowgroup

17 Índices Columnstore: Processo de Construção
ProductID Name Product Number Make Flag 1 Adjustable Race AR-5381 2 Bearing Ball BA-8327 3 BB Ball Bearing BE-2349 4 Headset Ball Bearings BE-2908 1. Encoding 2. Compress Rowgroup LOB Page 1 2 3 4 LOB Page Adj Bea BB Hea Segments LOB Page AR- BA- BE- LOB Page 1 316 Blade BL-2036 1 317 LL Crankarm CA-5965 318 ML Crankarm CA-6738 Rowgroup

18 Otimização de Performance
Índices Rowstore vs Columnstore

19 Índices Columnstore: Armazenamento
Compressão de dados capaz de reduzir o consumo de disco e memória em até 10x Algoritmos de compressão aplicados sobre as colunas da tabela individualmente, portanto, há mais chances de existirem valores repetidos

20 Índices Columnstore: Armazenamento
ProductID 1 2 3 4 316 317 318 LOB Page 1. Encoding 2. Compress Rowgroup LOB Page LOB Page Segments

21 Índices Columnstore: Eliminação de Colunas
Apenas colunas desejadas são lidas do disco ProductID 1 2 3 Name Adjustable Race Bearing Ball BB Ball Bearing ProductNumber AR-5381 BA-8327 BE-2349 MakeFlag 1 4 316 317 318 Headset Ball Bearings Blade LL Crankarm ML Crankarm BE-2908 BL-2036 CA-5965 CA-6738 1

22 Índices Columnstore: Eliminação de Rowgroups
Intervalo de valores mantido nos metadados ProductID 1 2 3 Name Adjustable Race Bearing Ball BB Ball Bearing ProductNumber AR-5381 BA-8327 BE-2349 MakeFlag 1 Dicionário 4 316 317 318 Headset Ball Bearings Blade LL Crankarm ML Crankarm BE-2908 BL-2036 CA-5965 CA-6738 1

23 Batch Mode SQL Server processa grupos de registros, ao invés de manipular um registro por vez Maior desempenho, justamente por executar a mesma operação para vários registros ProductID Name ProductNumber MakeFlag 1 Adjustable Race AR-5381 CPU 2 Bearing Ball BA-8327 3 BB Ball Bearing BE-2349 1 4 Headset Ball Bearings BE-2908 CACHE

24 Demonstração Potencial de ganho de desempenho em uma consulta simples usando Columnstore Index

25 Evolução dos Columnstore Indexes
Índices Rowstore vs Columnstore

26 Evolução dos Columnstore Indexes
SQL Server 2012 Nonclustered Columstore Index (read-only) SQL Server 2014 Clustered Columnstore Index SQL Server 2016 In-Memory Columnstore Index Clustered Columnstore Index + Nonclustered Rowstore Index Filtered Nonclustered Columnstore Index Nonclustered Columnstore Index (read-write)

27 Armazenamento vs Tipos de Índices
Tipo de armazenamento Principais Tipos de Índices Disponíveis Heap Nonclustered Index Nonclustered Columnstore Clustered Nonclustered Index Nonclustered Columnstore Clustered Columnstore Nonclustered Index In-Memory Hash Index Range (Nonclustered) Clustered Columnstore

28 Demonstração Novas combinações de funcionalidade envolvendo Columnstore Indexes

29 Comparação Columnstore Index Rowstore Index
(Rowstore e Columnstore Index) Columnstore Index Maior probabilidade de seeks Queries que possuam filtros de dados relativamente seletivos Queries que manipulam pequenos volumes de dados Workloads transacionais Maior incidência de scans Queries que manipulam grandes volumes de dados Combinar workloads transacionais com analíticos Otimizar a performance de ambientes Data Warehousing

30 Conclusão Disponível desde o SQL Server 2012 (read-only)
Parte da tecnologia “In-Memory” (xVelocity) Edições anteriores do SQL Server: Somente Enterprise SQL Server 2016 RTM Enterprise SP1 - All Editions

31 Referências adicionais
Niko Neugebauer Artigos Interessantes What You Should Know About SQL Server 2016 Columnstore Indexes

32 Dúvidas?!

33 Obrigado !!!


Carregar ppt "SQL Saturday #573 – Brasília 2016"

Apresentações semelhantes


Anúncios Google