Velocidade de Truncamento do Postgresql

Estamos usandoPostgresql 9.1.4 como nosso servidor db. Eu tenho tentado acelerar minha suíte de testes, então eu olhei o perfil do banco de dados um pouco para ver exatamente o que está acontecendo. Nós estamos usandodatabase_cleaner para truncar tabelas no final dos testes. SIM Sei que as transações são mais rápidas, não posso usá-las em certas circunstâncias, por isso não me preocupo com isso.

Com o que estou preocupado, é por que o TRUNCATION leva tanto tempo (mais do que o uso de DELETE) e por que demora ainda mais no meu servidor de CI.

Agora, localmente (em um Macbook Air), uma suíte de testes completa leva 28 minutos. Seguindo os registros, toda vez que truncamos as tabelas ... ou seja:

TRUNCATE TABLE table1, table2  -- ... etc

leva mais de um segundo para executar o truncamento. Seguindo os logs do nosso servidor de CI (Ubuntu 10.04 LTS), são necessários 8 segundos completos para truncar as tabelas e uma compilação leva 84 minutos.

Quando eu mudei para o:deletion estratégia, a minha compilação local levou 20 minutos e o servidor de CI caiu para 44 minutos. Isto é umsignificativo diferença e eu estou realmente impressionado quanto ao porquê isso pode ser. Eu tenhoafinado a DB no servidor de CI, tem ram de sistema de 16GB, shared_buffers de 4gb ... e um SSD. Todas as coisas boas. Como isso é possível:

uma. que é muito mais lento que o meu Macbook Air com 2GB de RAM
b. que TRUNCATION é muito mais lento do que DELETE quando opostgresql docs declarar explicitamente que deveria ser muito mais rápido.

Alguma ideia?

questionAnswers(4)

yourAnswerToTheQuestion