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?