SQL Passo-a-Passo – Passo 5 (Filegroups e Tabelas Particionadas na prática)

No post anterior, prometi a sintaxe para criar uma tabela particionada…

Então vamos lá! Primeiro, vamos criar um Banco de Dados com um Filegroup Primário (no disco F:), um Filegroup Secundário com nome dbTestePart_FG1 (nos discos G:, H: e I:) e os arquivos de log no disco J:.

Os arquivos do Filegroup dbTestePart_FG1 são criados com 1 MB e crescem em incrementos de 1 MB (com um máximo de 50 MB), conforme podemos verificar na sitaxe utilizada para criar este Banco de Dados:

USE master;
GO

CREATE DATABASE dbTestePart
ON PRIMARY
( NAME='dbTestePart_Primario',
FILENAME=
'F:\dbTestePart_Primario.mdf',
SIZE=10MB,
MAXSIZE=50MB,
FILEGROWTH=1MB),
FILEGROUP dbTestePart_FG1
( NAME='dbTestePart_FG1_Dat1',
FILENAME =
'G:\dbTestePart_FG1_Dat1.ndf',
SIZE=1MB,
MAXSIZE=50MB,
FILEGROWTH=1MB),
( NAME='dbTestePart_FG1_Dat2',
FILENAME =
'H:\dbTestePart_FG1_Dat2.ndf',
SIZE=1MB,
MAXSIZE=50MB,
FILEGROWTH=1MB),
( NAME='dbTestePart_FG1_Dat3',
FILENAME =
'I:\dbTestePart_FG1_Dat3.ndf',
SIZE=1MB,
MAXSIZE=50MB,
FILEGROWTH=1MB)
LOG ON
( NAME='dbTestePart_Log',
FILENAME =
'J:\dbTestePart.ldf',
SIZE=1MB,
MAXSIZE=10MB,
FILEGROWTH=1MB);
GO

Podemos definir o Filegroup dbTestePart_FG1 como default com o comando:

ALTER DATABASE dbTestePart
MODIFY FILEGROUP dbTestePart_FG1 DEFAULT;
GO

Criando uma tabela no Filegroup

Agora, vamos criar uma tabela no novo Filegroup. A sintaxe é:

USE dbTestePart;
CREATE TABLE TabelaPart
( Coluna1 int PRIMARY KEY,
Coluna2 char(1024),
Coluna3 char(1024))
ON dbTestePart_FG1;
GO

Conferindo os Discos

Verificando os discos utilizados, podemos conferir o tamanho dos arquivos criados:

SQL - Disco FSQL - Disco GSQL - Disco HSQL - Disco ISQL - Disco J

Populando a Tabela

Cada   linha desta coluna ocupa cerca de 2 KB (temos 2 campos de 1024 bytes).
Quando adicionamos registros na tabela, as informações são escritas nos 3 discos do Filegroup.

Agora vejamos o que acontece se criarmos 2.000 registros nesta tabela, usando os seguintes comandos:

DECLARE @nContador int;
SET @nContador = 1;

USE dbTestePart

WHILE (@nContador < 2000)
BEGIN;
INSERT INTO TabelaPart VALUES
(@nContador,'TEXTO', 'TEXTO');
SET @nContador = @nContador + 1;
END;
GO

Os 2.000 novos registros ocupam cerca de 4 MB. Em cada arquivo do Filegroup temos originalmente 1 MB, então os arquivos precisarão "crescer" para acomodar todos os registros.

De fato, após executar o comando, podemos notar que cada arquivo possui 2 MB! (porque o incremento é de 1 MB por vez).

SQL - Disco FSQL - Disco G SQL - Disco HSQL - Disco I SQL - Disco J

Repare que somente os arquivos nos quais a tabela é armazenada precisaram crescer.

(continua)