Korzystanie z PG 9.1 na Ubuntu 12.04.
Obecnie uruchomienie dużego zestawu instrukcji UPDATE w bazie danych, które mają postać:
UPDATE table
SET field1 = constant1, field2 = constant2, ...
WHERE id = constid
(Po prostu nadpisujemy pola obiektów identyfikowanych przez identyfikator.) Wartości pochodzą z zewnętrznego źródła danych (jeszcze nie w DB w tabeli).
Tabele zawierają garść indeksów i nie ma ograniczeń klucza obcego. Do końca nie jest wykonywany COMMIT.
Zaimportowanie pg_dump
całego DB zajmuje 2 godziny. To wydaje się punktem odniesienia, do którego powinniśmy rozsądnie dążyć.
Czy poza stworzeniem niestandardowego programu, który w jakiś sposób rekonstruuje zestaw danych, aby PostgreSQL mógł ponownie zaimportować, czy jest coś, co możemy zrobić, aby zbliżyć masową wydajność UPDATE do wydajności importu? (Jest to obszar, który naszym zdaniem obsługuje drzewa scalające o strukturze dziennika, ale zastanawiamy się, czy jest coś, co możemy zrobić w PostgreSQL.)
Jakieś pomysły:
- porzucasz wszystkie wskaźniki inne niż ID, a potem odbudowujesz?
- zwiększenie checkpoint_segments, ale czy to faktycznie pomaga w utrzymaniu długoterminowej przepustowości?
- używając technik wymienionych tutaj ? (Załaduj nowe dane jako tabelę, a następnie „scal” stare dane, w których nie znaleziono identyfikatora w nowych danych)
Zasadniczo jest wiele rzeczy do wypróbowania i nie jesteśmy pewni, jakie są najbardziej skuteczne lub czy pomijamy inne rzeczy. Kolejne dni spędzimy na eksperymentach, ale pomyśleliśmy, że też tutaj zapytamy.
Mam równoległe obciążenie tabeli, ale jest to tylko do odczytu.
explain analyze
to, że używa indeksu do wyszukiwania?