Otimizando performance com Filegroups

Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Para efetuar o download você precisa estar logado. Clique aqui para efetuar o login
Confirmar voto
0
 (0)  (0)

Neste artigo, Paulo Ribeiro explica o que são Filegroups e como otimizá-los para o melhor ganho de performance.

Filegroups são estruturas lógicas - ou se preferir unidades de gerenciamento - que dão suporte aos arquivos de dados (=estruturas físicas) de um database. Todo database possui pelo menos um filegroup – o filegroup primário, gerado automaticamente no momento da criação do database (ver Figura 1)

 PauloRibeiro_Filegroups_Fig01.gif

Figura 1. Visualizando o filegroup primário do database dbTeste

Pode-se juntar vários arquivos físicos num mesmo filegroup, ou criar vários filegroups, mas qual a recomendação ? A resposta é: depende do que você pretende exatamente :

 

·         Se o disco onde está localizado o filegroup primário “estourou”, você poderia criar uma extensão do filegroup primário noutra unidade. Nesse caso, você criaria outro arquivo físico, mas associaria esse arquivo na mesma unidade de gerenciamento – PRIMARY ;

·         Se você não possui um sistema de RAID de discos, pode obter um significativo aumento de performance distribuindo tabelas e índices em filegroups distintos, localizados em unidades com controladoras específicas – por exemplo, as tabelas ficam no filegroup PRIMARY na unidade C: e os índices no filegroup FG_Indice na unidade D:. Assim, você estará viabilizando threads paralelas para busca nas páginas de dados e índices, melhorando a performance como um todo.

Como criar um filegroup secundário para armazenamento de índices

Para criar outro filegroup, basta acessar a tela de propriedades do database (ver Figura 1) e adicionar outro filegroup (ver Figura 2).

 

 PauloRibeiro_Filegroups_Fig02.gif

Figura 2. Criando um filegroup secundário

Uma vez adicionado, basta criar tabelas no filegroup PRIMARY e índices no filegroup FG_INDICE. Para especificar o filegroup durante a criação de objetos e índices, utilize a cláusula ON ao final dos comandos CREATE TABLE, CREATE INDEX e ALTER TABLE ... ADD ... PRIMARY-KEY (ver Listagem 1)

 

create table pedido

(

id_pedido int not null

,dt_emissao smalldatetime not null

,id_emitente int not null

)

ON 'PRIMARY'

go

alter table pedido add constraint pk_pedido primary key clustered (id_pedido) on 'PRIMARY'

go

create nonclustered index ix_pedido on pedido (dt_emissao) on 'FG_Indice'

go

Listagem 1. Especificando o filegroup durante a criação de objetos

 

Observações:

 

·         Se você não especificar o filegroup na criação do objeto, o objeto será criado no filegroup default (=PRIMARY) ;

·         Pode-se alterar o filegroup default com o comando ALTER DATABASE :

 

ALTER DATABASE MODIFY FILEGROUP DEFAULT

 

·         Como o leaf level do índice cluster ordena as páginas de dados da própria tabela, a primary key pk_pedido deve permanecer no filegroup PRIMARY

Conclusão

Para obter performance precisamos estar sempre atentos aos detalhes. Se você não possui um sistema de RAID e quer performance, armazene índices não cluster numa unidade de disco e filegroup específicos - o resultado vale a pena.

Até a próxima!

 

Noticia_PauloRibeiro.gif 

Paulo Ribeiro (psribeiro@hotmail.com) é subeditor da SQLMagazine. Formado em Processamento de Dados pela Universidade Mackenzie, possui certificação MCDBA e atua como coordenador da área de Banco de Dados da Livraria e Papelaria Saraiva S/A.

 
Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Receba nossas novidades
Ficou com alguma dúvida?