Prędkość obcięcia Postgresql

UżywamyPostgresql 9.1.4 jako nasz serwer db. Próbowałem przyspieszyć mój zestaw testów, więc zacząłem profilować nieco db, aby dokładnie zobaczyć, co się dzieje. Używamydatabase_cleaner Obetnij tabele na koniec testów. TAK Wiem, że transakcje są szybsze, nie mogę ich używać w pewnych okolicznościach, więc nie przejmuję się tym.

Tym, czym jestem zainteresowany, jest to, dlaczego TRUNCATION trwa tak długo (dłużej niż przy użyciu DELETE) i dlaczego trwa NAWET na moim serwerze CI.

Obecnie lokalnie (na Macbook Air) pełny zestaw testów trwa 28 minut. Dopasowywanie dzienników, za każdym razem, gdy skracamy tabele ... tj .:

TRUNCATE TABLE table1, table2  -- ... etc

wykonanie obcięcia trwa ponad 1 sekundę. Dostosowywanie dzienników na naszym serwerze CI (Ubuntu 10.04 LTS) zajmuje pełne 8 sekund na obcięcie tabel, a wykonanie zajmuje 84 minuty.

Kiedy przełączyłem się na:deletion strategia, moja lokalna kompilacja zajęła 20 minut, a serwer CI spadł do 44 minut. To jestznaczący różnica i naprawdę jestem zdumiony, dlaczego tak może być. Janastrojony  DB na serwerze CI, ma 16 GB pamięci RAM, 4 GB współdzielonych buforów ... i SSD. Wszystkie dobre rzeczy. Jak to jest możliwe:

za. że jest o wiele wolniejszy niż mój Macbook Air z 2 GB pamięci RAM
b. że TRUNCATION jest o wiele wolniejszy niż DELETE, gdydokumenty postgresql stan wyraźnie że powinno być znacznie szybciej.

jakieś pomysły?

questionAnswers(4)

yourAnswerToTheQuestion