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 ... |