Artigo do tipo Tutorial
Recursos especiais neste artigo:
Conteúdo sobre boas práticas.
Porque este artigo é útil
O particionamento de tabelas permite fazer com que seus registros estejam divididos em mais de uma partição de acordo com uma função e um esquema de particionamento. A função indica como os dados serão divididos e o esquema, onde eles serão armazenados. A aplicação de conceitos sobre particionamento de tabelas e sliding window serão úteis na administração de grandes volumes de dados e no desenvolvimento de extração, transformação e cargas para integração de dados (ETL – Extract, Transform and Load). A técnica pode ser usada para carregar novos dados para uma tabela, expurgar dados de uma tabela e também alterar dados de uma tabela, mesmo que em um volume menor, devido à praticidade, velocidade e performance. Para entender como podemos obter este tipo de benefício, este artigo descreve conceitos sobre os temas sliding window e particionamento de tabelas. Através de contextualizações e exemplos simples, serão demonstradas boas práticas com relação à movimentação e manutenção de grandes massas de dados no SQL Server.

Com o grande aumento do volume de dados armazenados em bancos de dados, as tabelas crescendo exponencialmente e a necessidade das empresas manterem seus dados históricos para análises e mineração dos dados, a administração de toda esta infraestrutura fica cada dia mais difícil. Uma simples atualização de registros ou uma exclusão de registros pode se tornar um grande desafio, demandando tempo, recursos de servidor e espaço em disco.

Imagine uma empresa que possui um e-commerce, por exemplo, com um crescimento de 5.000, 10.000, 15.000 ou mais clientes por mês, que realiza cerca de 500.000 vendas por mês e que guarda suas informações de histórico de vendas há pelo menos oito ou dez anos, assim como as informações de navegação do cliente no e-commerce antes de comprar (ou não) determinado produto. Afinal, toda informação relacionada ao seu cliente e seus comportamentos são importantes para definir qual tipo de promoção pode ser interessante para ele, quais campanhas da empresa vão atingir o público correto e garantir um retorno melhor e mais assertivo para a empresa.

Toda esta informação é valiosa e fica guardada nos chamados “armazéns de dados” (Data Warehouse), onde normalmente a modelagem dos dados segue um padrão de desnormalização (caminho inverso das formas normais, ou normalização de dados). Com isso, as tabelas ficam cada vez maiores em tamanho, em quantidade de colunas e redundância de dados.

A dificuldade em realizar manutenções em grandes tabelas faz com que os administradores de banco de dados procurem por novas estratégias e ferramentas.

Neste artigo, serão abordadas as melhores práticas para particionamento de tabelas e como tirar vantagem desta funcionalidade, que foi inserida a partir do SQL Server 2005, para ajudar a resolver este problema atual das tabelas gigantes com o uso de técnicas como Sliding Window.

Conceitos iniciais sobre particionamento de tabelas

Todas as tabelas criadas dentro de uma base de dados no SQL Server possui no mínimo uma partição que deve estar vinculada a um Filegroup, conforme a Figura 1. Ou seja, é possível criar uma tabela e simplesmente configurar em qual Filegroup seus dados serão armazenados.

Dizer que uma tabela é particionada significa dizer que os registros dela estão divididos em mais de uma partição, de acordo com uma Função de Particionamento (Partition Function) e um Esquema de Particionamento (Partition Scheme), vide Figura 2.

Também é possível particionar os índices das tabelas, que são particionados da mesma forma que as tabelas, através de um esquema e função de particionamento. Não abordaremos os índices nos exemplos deste artigo para simplificá-los.

Figura 1. Visão geral da estrutura de tabela não particionada no SQL Server.

Figura 2. Visão geral da estrutura de tabela particionada no SQL Server.

Função de Particionamento

Uma função de particionamento, assim como uma função em uma base de dados, recebe um parâmetro com um tipo de dado (data type) específico e, de acordo com o valor do parâmetro, retorna o número da partição em que o registro deverá ficar. Por exemplo, podemos criar uma função de particionamento que recebe um parâmetro do tipo BIT e armazena os registros da tabela em três partições:

1. Uma partição recebe os registros cujo valor passado como parâmetro para a função de particionamento é 1;

2. A outra partição recebe os registros cujo valor do parâmetro seja 0;

3. E caso a função esteja configurada como RANGE RIGHT, uma terceira (e última) partição receberá os registros cujo valor do parâmetro esteja fora do RANGE. Caso a função esteja configurada como RANGE LEFT, os registros cujo valor do parâmetro esteja fora do RANGE serão armazenados na primeira partição existente (veja o BOX 1).

BOX 1. Configuração do range de dados na função de particionamento

Existem duas possíveis configurações de range de dados na função de particionamento:

· RANGE RIGHT: os registros cujo parâmetro passado para a função não estejam dentro de um range criado, irão para a última partição;

· RANGE LEFT: os registros cujo parâmetro passado para a função não estejam dentro de um range criado, irão para a primeira partição.

Esquema de particionamento

O esquema de particionamento, por sua vez, serve para indicar em qual grupo de arquivos (Filegroup) ficará cada partição, de acordo com a função de particionamento sobre a qual o esquema será criado. Seguindo o mesmo exemplo anterior, o esquema de particionamento seria criado vinculado à função de particionamento que recebe um parâmetro do tipo BIT e pode indicar que a partição 1 (a que recebe os registros com parâmetro 0) ficará no filegroup [FG_1], a partição 2 (a que recebe os registros com parâmetro 1) ficará no filegroup [FG_2], e os registros cujo valor do parâmetro passado for diferente de 0 e 1 ficarão no [FG_3] ou [FG_1], de acordo com a configuração de range escolhido (LEFT ou RIGTH). Ou podemos ainda configurar o esquema de particionamento para usar o mesmo filegroup para todas as partições.

...
Quer ler esse conteúdo completo? Tenha acesso completo