sexta-feira, 31 de julho de 2009

Criando particionamentos no Sql Server

Os particionamentos de arquivos podem ser bastante úteis para banco de dados que podem ter um crescimento exagerado e para aliviar HDs com um nível de IO de disco exagerado. Vamos ver um exemplo prático desta implementação:

Primeiro vamos criar um banco para comportar o nosso exemplo:

Create database MeuBanco
go
use MeuBanco
go


Agora vamos criar os filegroups que receberão os arquivos das partições:

ALTER DATABASE MeuBanco
ADD FILEGROUP GrupoArquivo1
GO

ALTER DATABASE MeuBanco
ADD FILE
(
NAME = 'GrupoArquivo1.ndf',
FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\GrupoArquivo1.ndf',
SIZE = 5MB,
MAXSIZE = 100MB,
FILEGROWTH = 5MB
)
TO FILEGROUP GrupoArquivo1
go

ALTER DATABASE MeuBanco
ADD FILEGROUP GrupoArquivo2
GO

ALTER DATABASE MeuBanco
ADD FILE
(
NAME = 'GrupoArquivo2.ndf',
FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\GrupoArquivo2.ndf',
SIZE = 5MB,
MAXSIZE = 100MB,
FILEGROWTH = 5MB
)
TO FILEGROUP GrupoArquivo2
go

ALTER DATABASE MeuBanco
ADD FILEGROUP GrupoArquivo3
GO

ALTER DATABASE MeuBanco
ADD FILE
(
NAME = 'GrupoArquivo3.ndf',
FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\GrupoArquivo3.ndf',
SIZE = 5MB,
MAXSIZE = 100MB,
FILEGROWTH = 5MB
)
TO FILEGROUP GrupoArquivo3
go

ALTER DATABASE MeuBanco
ADD FILEGROUP GrupoArquivo4
GO

ALTER DATABASE MeuBanco
ADD FILE
(
NAME = 'GrupoArquivo4.ndf',
FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\GrupoArquivo4.ndf',
SIZE = 5MB,
MAXSIZE = 100MB,
FILEGROWTH = 5MB
)
TO FILEGROUP GrupoArquivo4
go


Agora criaremos as funções de particionamento de valores. Nossa tabela de exemplo TabelaTesteParticao, terá duas colunas: Col1 que será um inteiro e Col2 que será um char de 10. Os particionamentos serão determinados pelos valores da coluna col1, que podem ser nos ranges:

  • Menor ou igual a 1
  • Entre 1 e 100
  • Entre 101 e 1000
  • Maior que 1000

Criando as função de range:
CREATE PARTITION FUNCTION FuncaoFaixaValor (int)
AS RANGE LEFT FOR VALUES (1, 100, 1000) ;
GO


Criando o schema de partição:
CREATE PARTITION SCHEME ParticaoFaixaValor
AS PARTITION FuncaoFaixaValor
TO (GrupoArquivo1, GrupoArquivo2, GrupoArquivo3, GrupoArquivo4) ;
GO


Criando a nossa tabela de exemplo:
CREATE TABLE TabelaTesteParticao(col1 int, col2 char(10))
ON ParticaoFaixaValor (col1) ;
GO


Inserindo os valores de exemplo:
insert into TabelaTesteParticao(col1,col2) values (1,'P. 1')
insert into TabelaTesteParticao(col1,col2) values (2,'P. 2')
insert into TabelaTesteParticao(col1,col2) values (101,'P. 3')
insert into TabelaTesteParticao(col1,col2) values (1001,'P. 4')


O acesso as informações da tabela, é transparente, não alterando o modo de uso dos comando T-SQL:
select * from TabelaTesteParticao


Até a próxima!

Nenhum comentário:

Postar um comentário

Leave your comment here!