Postgresql Trunkierungsgeschwindigkeit

Wir benutzenPostgresql 9.1.4 als unser db server. Ich habe versucht, meine Testsuite zu beschleunigen, also habe ich versucht, die Datenbank ein wenig zu profilieren, um genau zu sehen, was los ist. Wir benutzendatabase_cleaner Tabellen am Ende von Tests abschneiden. JA, ich weiß, dass Transaktionen schneller sind. Ich kann sie unter bestimmten Umständen nicht verwenden, daher kümmere ich mich nicht darum.

Was mich beschäftigt, ist, warum TRUNCATION so lange dauert (länger als DELETE) und warum es auf meinem CI-Server immer länger dauert.

Derzeit dauert eine vollständige Testsuite vor Ort (auf einem Macbook Air) 28 Minuten. Jedes Mal, wenn wir Tabellen abschneiden, werden die Protokolle nachverfolgt.

TRUNCATE TABLE table1, table2  -- ... etc

Das Abschneiden dauert länger als 1 Sekunde. Das Abschneiden der Protokolle auf unserem CI-Server (Ubuntu 10.04 LTS) dauert volle 8 Sekunden, und ein Build dauert 84 Minuten.

Als ich auf das umgestiegen bin:deletion Strategie, mein lokaler Build dauerte 20 Minuten und der CI-Server ging auf 44 Minuten zurück. Das ist einvon Bedeutung Unterschied und ich bin wirklich hin und weg, warum dies sein könnte. Ich habeabgestimmt das Die Datenbank auf dem CI-Server verfügt über einen 16-GB-System-RAM, 4-GB-Shared_Buffer und eine SSD. All die guten Sachen. Wie ist es möglich:

ein. dass es so viel langsamer ist als mein Macbook Air mit 2 GB RAM
b. Diese TRUNCATION ist so viel langsamer als DELETE, wenn diepostgresql docs ausdrücklich angeben dass es viel schneller sein sollte.

Irgendwelche Gedanken?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage