[firebase-br] SELECT INTO

Douglas Tosi douglasht em gmail.com
Qua Set 2 14:48:12 -03 2009


2009/7/23 Sandro Souza <escovadordebits em gmail.com>:
> seguida, e no caso do Firebird, com a opção "use all space", que realmente
> deixa a base de dados apenas com o tamanho que realmente está ocupando, e
> que será aumentado naturalmente a medida que essa base seja utilizada e
> novas tabelas temporárias sejam necessárias.

Não é bem assim.
O Firebird reserva 20% do espaço de cada página para "registros
delta". Estes registros delta são gerados quando um registro original
sofre alterações. Seja um update ou delete.
Quando você pede para ler um registro atualizado, o Firebird precisa
ler o registro original e todos os delta.
É muito mais rápido reconstruir um registro se o original e os deltas
estiverem na mesma página. Por isto o firebird faz esta reserva.

Quando você cria/restaura um banco com a opção "use all space" você
está efetivamente desligando esta reserva. Pode parecer um bom negócio
já que a base fica menor. Mas provavelmente é um tiro no pé. Na medida
em que a base vai sendo utilizada, com updates, deletes, etc. esses
registros delta vão ficando espalhados e as consultas tendem a demorar
mais porque o firebird tem que ler pelo menos duas páginas para
reconstruir cada registro alterado.

Por outro lado se você estiver usando uma base read-only, pode valer a
pena usar a opção "use-all-space" porque ela efetivamente aumenta a
densidade dos dados.
Para qualquer outro caso, provavelmente é um erro usá-la.

hth,
-- 
Douglas Tosi
www.sinatica.com




Mais detalhes sobre a lista de discussão lista