No post Como não se deve otimizar o desempenho de um banco de dados Progress, foi questionado quanto ao indicador Scatter Factor existente no processo de dbanalys/tabanalys.
O scatter factor é um indicador da "qualidade" da leitura sequencial. Ele mede o fator de distanciamento de registros de uma mesma tabela.
Esse distanciamento costuma ser alto em registros localizados em storage area tipo I. Isso porque blocos são compartilhados com várias tabelas e os registros vão se colocando nos espaços disponíveis sequencialmente. O problema é que o sequencial para o banco não é necessariamente sequencial para a tabela.
Em storage area tipo II, os registros se colocarão sequencialmente para a tabela, dentro do espaço de até 512 blocos contíguos, o que reduzirá consideravelmente esse scatter factor. Quando maior o número do “cluster” de blocos, melhor o agrupamento de registros.
Lembro que a storage area tipo II não vai eliminar o distanciamento. Existem outros fatores que prejudicam a leitura sequencial:
- Se existir outra tabela dentro da storage area, haverá "pulos" de 512 blocos;
- Todo bloco mantém um espaço vazio destinado a alteração de registro no mesmo bloco, o que evita a fragmentação, chamado de Toss Create Limit;
- Apesar dos registros serem sequenciais, as leituras podem não ser. Ler um registro demanda um índice, que se não estiver na mesma ordem de criação, poderá apontar para blocos diferentes.
Resumindo, não compensa fazer dump-load por causa do scatter factor. Compensa sim, fazer um tablemove para uma storage area tipo II.