Carregar apresentação
A apresentação está carregando. Por favor, espere
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 !!!
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.