quarta-feira, 25 de novembro de 2009

Como criar Databases em grupos de arquivos (filegroup) diferentes para melhorar a performance do servidor de dados

Muitas vezes acontece de criarmos o banco de dados sem dimensioná-lo corretamente e especificar exatamente onde desejamos que as tabelas fiquem. Pois então, aqui vai um exemplo de como podemos fazer isso:


-- Neste exemplo estamos identificando cada grupo de arquivos
-- utilizando a palavra FILEGROUP, desta forma poderemos escolhar
-- em qual grupo iremos criar as nossas tabelas, índices etc...
CREATE DATABASE EMPRESA
ON ( NAME = 'EMPRESA_CADASTROS',
FILENAME = 'C:\DADOS\EMPRESA_CADASTROS.MDF',
SIZE = 5, -- assume MB (KB, GB, TB)
MAXSIZE = 100,
FILEGROWTH = 5 ),
FILEGROUP VENDAS
( NAME = 'EMPRESA_VENDAS',
FILENAME = 'C:\DADOS\EMPRESA_VENDAS.NDF',
SIZE = 5, -- assume MB (KB, GB, TB)
MAXSIZE = UNLIMITED,
FILEGROWTH = 5 ),
FILEGROUP COMPRAS
( NAME = 'EMPRESA_COMPRAS',
FILENAME = 'C:\DADOS\EMPRESA_COMPRAS.NDF',
SIZE = 5, -- assume MB (KB, GB, TB)
MAXSIZE = UNLIMITED,
FILEGROWTH = 5 ),
FILEGROUP FINANCEIRO
( NAME = 'EMPRESA_FINANCEIRO_1',
FILENAME = 'C:\DADOS\EMPRESA_FINANCEIRO_1.NDF',
SIZE = 5, -- assume MB (KB, GB, TB)
MAXSIZE = UNLIMITED,
FILEGROWTH = 5 ),
( NAME = 'EMPRESA_FINANCEIRO_2',
FILENAME = 'C:\DADOS\EMPRESA_FINANCEIRO_2.NDF',
SIZE = 5, -- assume MB (KB, GB, TB)
MAXSIZE = UNLIMITED,
FILEGROWTH = 5 )
LOG ON
( NAME = 'EMPRESA_LOG',
FILENAME = 'C:\DADOS\EMPRESA_LOG.LDF' );
GO
--
USE EMPRESA;
EXEC SP_HELPFILE;

-- Esta tabela será criada em PRIMARY porque
-- não informaremos o FILEGROUP
CREATE TABLE TABELA_1
( COD INT PRIMARY KEY,
NOME VARCHAR(30) )

-- Esta tabela será criada em VENDAS
CREATE TABLE TABELA_2
( COD INT,
NOME VARCHAR(30),
CONSTRAINT PK_TABELA_2 PRIMARY KEY (COD) ) ON VENDAS

EXEC SP_HELP TABELA_2 --> Está no filegroup VENDAS


-- Criar tabela no grupo VENDAS
CREATE TABLE TABELA_3
( COD INT PRIMARY KEY, NOME VARCHAR(30) ) ON COMPRAS;

-- Criar tabela no grupo FINANCEIRO
CREATE TABLE TABELA_4
( COD INT PRIMARY KEY, NOME VARCHAR(30) ) ON FINANCEIRO;

-- Mostra em que FILEGROUP está cada tabela
SELECT I.OBJECT_ID AS ID_DA_TABELA,
I.NAME AS CHAVE_PRIMARIA,
T.NAME AS NOME_TABELA,
I.DATA_SPACE_ID AS ID_FEILEGROUP,
FG.NAME AS FILEGROUP
FROM SYS.INDEXES I
JOIN SYS.SYSOBJECTS T ON I.OBJECT_ID = T.ID
JOIN SYS.DATA_SPACES FG ON I.DATA_SPACE_ID = FG.DATA_SPACE_ID
WHERE I.IS_PRIMARY_KEY = 1

Nenhum comentário:

Postar um comentário