Atenção: por essa edição ser muito antiga não há arquivo PDF para download.
Os artigos dessa edição estão disponíveis somente através do formato HTML.

Clique aqui para ler todos os artigos desta edição

Heap Tables

Livre-se delas para ganhar performance

Leitura obrigatória: SQL Magazine 10, artigo “Entendendo e utilizando índices na otimização de queries no SQL Server”.

Dedicarei esse artigo a um assunto especial e pouco explorado: Heap tables, ou se preferir, tabelas que não possuem índice cluster.

Os processos de desfragmentação existentes no SQL Server 2000 foram criados para desfragmentar índices. Como as páginas de dados de uma heap não são regidas por um índice, não é possível desfragmentar uma heap utilizando os comandos convencionais DBCC dbReindex e IndexDefrag. Heaps fragmentadas são indicadoras de má performance, e a simples criação de um índice cluster poderia resolver o problema, como veremos a seguir.

Heap tables x performance

Um índice cluster atua diretamente sobre as páginas de dados da tabela, dispensando a utilização de ponteiros, como acontece nos índices convencionais. Em tabelas que possuem índice cluster, a gravação das linhas nas páginas de dados obedece à classificação da chave do índice.

Em oposição às tabelas com índice cluster, estão as heap tables. Heap é sinônimo de aleatório, desordenado. Heap tables são tabelas cujas linhas são gravadas nas páginas de dados sem que exista uma ordenação pré-estabelecida, levando-se em conta a regra de “inserir onde existe espaço”, através de consulta nas páginas PFS (ver Nota 1).

 

Nota 1. FPS

PFS, anacrônimo de Page Free Space, é uma página especial destinada a controlar o espaço livre nas páginas do database. Uma PFS controla 8.000 páginas; cada byte da página PFS pode assumir quatro estados: totalmente vazia, até 50% de utilização, de 51 a 80% de 81 a 95% e de 96 a 100%. O controle de páginas PFS é utilizado por heaps ou por tabelas que possuem colunas ntext, text ou image.

 

Se compararmos as páginas de dados de uma tabela de nomes – com e sem índice cluster definido – após uma série de inserções, atualizações e exclusões, visualizaríamos os cenários apresentados nas Figuras 1 e 2.

 

Antonio    1

Ademir

Aldo

espaço livre espaço livre espaço espaço livre espaço

Arisvaldo 2

Beatriz

Carlos

espaço livre espa ço livre espaço es paço livre espaço

Danilo      3

espaço livre espa ço livre espaço es paço livre espaço livre espaço livre espaço livre espa ço livre espaço li

Lucimara 4

Paulo

espaço livre espa ço livre espaço es paço livre espaço livre espaço livre espaço livre espa

.  .  . 

 

       .  .  . 

 

  .  .  . 

Figura 1. Páginas de dados da tabela de nomes com índice cluster.

 

Antonio    1

Lucimara

espaço livre espa ço livre espaço es

Carlos

ço livre espaço es

Danilo      ...

Quer ler esse conteúdo completo? Tenha acesso completo