SQL Passo-a-Passo – Passo 4 (Filegroups e Tabelas Particionadas)

Nos posts anteriores, discutimos uma maneira de otimizar o acesso aos dados no SQL Server: o uso de índices.

Agora vamos falar de outros conceitos: os Filegroups e as Tabelas Particionadas.

O que são Filegroups?

Filegroups, como o próprio nome já dá a entender, são conjuntos de arquivos que armazenam dados. Todo banco de dados possui um Filegroup Primário e um arquivo de Log (falaremos mais sobre logs nos próximos posts). Apesar de não ser obrigatório, normalmente são utilizadas as extensões .mdf para Filegroups e .ldf para arquivos de Log.

Pois bem; um banco de dados pode possuir também Filegroups adicionais, e neste caso, normalmente a extensão .ndf é utilizada. Estes Filegroups adicionais podem armazenar dados de Tabelas Particionadas do banco de dados.

Tabela Particionada? O que é isso?!

A maneira mais simples de entender este conceito é através de um exemplo.
Imagine que você tenha que armazenar em uma tabela todas as notas fiscais emitidas por uma cadeia nacional de “fast food” em suas centenas de lojas pelo Brasil. A tabela deve ficar grande, não?
Agora imagine o trabalho que as operações do dia-a-dia realizam nesta tabela. Não só Inserções, Consultas e Alterações, mas também operações de Backup, Ordenação, Desfragmentação…

Agora pense na seguinte solução: Armazenar as notas fiscais referentes a cada mês em uma partição desta tabela. Algo como ter um caderninho para controle de cada mês. Não fica bem mais fácil? Na maior parte do tempo, você só manipulará os dados do mês atual. Você pode até manter a partição do mês atual como “read-write” e as outras como “read-only”.
Talvez você não precise de backups diários das partições relativas a meses anteriores, o que reduzirá drasticamente a janela de backup!

SQL Server - Tabela Particionada - Filegroups
Ilustração de Tabela Particionada 

Aumentando o Desempenho com múltiplos discos

Agora uma afirmação que pode causar espanto. Pode ser intuitivo pensar que é vantajoso, do ponto de vista de desempenho, colocar cada partição em um disco físico separado, não é mesmo?.
A princípio, temos a impressão que estaremos utilizando todos os discos ao mesmo tempo, o que melhora o desempenho.
Pois não é bem assim... Apesar dos ganhos de desempenho serem claros nas operações que acabamos de discutir em tabelas particionadas, o SQL Server executa operações de ordenação em uma partição de cada vez. Em outras palavras: somente um disco seria utilizado por vez, o que reduziria o desempenho...

A maneira mais eficiente de utilizar múltiplos discos é configurando volumes distribuídos em vários discos, em estruturas RAID. Desta forma, mesmo quando uma operação de ordenação é realizada numa única partição, todos os discos da estrutura RAID são utilizados em paralelo. Interessante, não? :)

Próximos Passos…

E o post ficou grande de novo… vou deixar para o próximo a parte da sintaxe para criar Filegroups e Tabelas Particionadas, e depois falamos de Logs, ok?

Ah! Vale lembrar que o uso de tabelas (e índices) particionados só é possível nas edições Enterprise, Developer e edições de Avaliação do SQL Server.