Atenção: esse artigo tem uma palestra complementar. Clique e assista!

De que trata o artigo:

O artigo aborda o tema Particionamento de objetos no SQL Server 2005 e SQL Server 2008. Ou seja, um único objeto poderá, dentro de uma regra lógica pré-definida, gravar os dados em diversos discos.


Para que serve:

O particionamento horizontal não só ajuda a diminuir a sobrecarga de I/O dos discos, mas também pode ser utilizado para otimizar backups.


Em que situação o tema é útil:

Com os bancos de dados crescendo dia após dia, aliada da necessidade em se manter os históricos dos dados, as tabelas tendem a inchar e com isso o I/O será maior. Neste contexto, a utilidade do tema discutido neste artigo está nas situações de otimização de objetos de banco e diminuição da carga de I/O.

Um dos grandes desafios do administrador de banco de dados é o ajuste de desempenho. Com os bancos de dados crescendo dia após dia, aliada da necessidade em se manter os históricos dos dados, as tabelas tendem a inchar e com isso o I/O será maior.

Entre diversas soluções de tuning e arquitetura de banco de dados que podemos encontrar para solucionar os problemas de I/O e desempenho das consultas, iremos abordar neste artigo o particionamento dos objetos, ou seja, um único objeto poderá, dentro de uma regra lógica pré-definida, gravar os dados em diversos discos.

No SQL Server 7 foi introduzida a funcionalidade que permitia criar tabelas em diferentes filegroups (grupos de arquivos), permitindo dividir a carga de I/O quando as tabelas ficam grandes. Com o crescimento constante dos sistemas, atualmente estamos armazenando mais e mais registros, e nem sempre é possível fazer uma exclusão de dados. Dessa forma, as tabelas ficam cada vez maiores e o I/O volta a ser um problema.

O SQL Server 2005 introduziu uma nova funcionalidade chamada Partitioning. Esta funcionalidade permite particionar horizontalmente tabelas, indexed views ou índices utilizando recursos automatizados do próprio database engine, ou seja, podemos dividir o conteúdo de uma tabela em diversas unidades de armazenamento.

Imaginemos que a nossa tabela de clientes na versão 7 do SQL Server tinha 500 mil registros. Para não sobrecarregar os discos e proporcionar um acesso mais rápido a uma tabela que é muito concorrida, colocamos esta tabela em outro disco. Para isso, criamos um filegroup e criamos a nossa tabela de cliente nesse novo filegroup.

Nos dias atuais, expandimos os negócios para um e-commerce e contamos com uma carteira de mais de um bilhão de registros somente na tabela de clientes. Para diminuir a concorrência de I/O, podemos criar três filegroups, um em cada disco do storage, e colocar os contatos de que começam com as letras de “A” até “I” no filegroup FGA, os contatos que começam com as letras de “J” até “T” no filegroup FGJ e finalmente o restante no filegroup chamado FGU (ver Figura 1). Esta seria uma possível solução para prover um acesso mais rápido aos dados de nossos clientes.

Figura 1. Distribuição dos dados.

Neste artigo, conheceremos com maiores detalhes o recurso de particionamento horizontal de tabelas, indexed views e índices no SQL Server 2005 e SQL Server 2008. Explicaremos como criar as regras de particionamento, as funções e os schemas, além de exemplificar cada parte do processo que envolve a divisão de um objeto dentro do SQL Server.

Partes de um particionamento

A tarefa de particionar tabelas ou índices demanda as seguintes etapas:

1. Analisar se a estrutura atual pode ser particionada ou se haverá algum ganho dividindo o conteúdo do objeto;

2. Determinar quais são as chaves do particionamento;

3. Criar os filegroups necessários;

4. Criar uma função de particionamento (partition function);

5. Criar um esquema de particionamento (partition scheme) para a função;

6. Criar a tabela ou índice no esquema.

A partir de agora, iremos seguir em todas essas etapas para um estudo de caso, onde usaremos um banco de dados de uma loja qualquer.

Estudo de Caso – Banco de Dados de Loja

Para exemplificar esses conceitos e a forma de implementar o particionamento no SQL Server, vamos criar um banco de dados chamado Loja com uma tabela chamada venda.

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