Utilizzo di PG 9.1 su Ubuntu 12.04.
Al momento ci vogliono fino a 24 ore per eseguire un ampio set di istruzioni UPDATE su un database, che sono nel formato:
UPDATE table
SET field1 = constant1, field2 = constant2, ...
WHERE id = constid
(Stiamo solo sovrascrivendo i campi degli oggetti identificati dall'ID.) I valori provengono da un'origine dati esterna (non già presente nel DB in una tabella).
Le tabelle hanno una manciata di indici ciascuna e nessun vincolo di chiave esterna. Nessun COMMIT viene effettuato fino alla fine.
Sono necessarie 2 ore per importare un pg_dump
intero DB. Sembra una linea di base che dovremmo ragionevolmente prendere di mira.
A corto di produrre un programma personalizzato che in qualche modo ricostruisce un set di dati per PostgreSQL da reimportare, c'è qualcosa che possiamo fare per avvicinare le prestazioni di UPDATE di massa a quelle dell'importazione? (Questa è un'area che crediamo che gli alberi di unione strutturati in tronchi gestiscano bene, ma ci stiamo chiedendo se c'è qualcosa che possiamo fare in PostgreSQL.)
Qualche idea:
- eliminare tutti gli indici non ID e ricostruire successivamente?
- aumentando checkpoint_segments, ma questo aiuta effettivamente a sostenere un throughput a lungo termine?
- usando le tecniche menzionate qui ? (Carica nuovi dati come tabella, quindi "unisci" i vecchi dati in cui l'ID non viene trovato nei nuovi dati)
Fondamentalmente ci sono un sacco di cose da provare e non siamo sicuri di quali siano i più efficaci o se stiamo trascurando altre cose. Passeremo i prossimi giorni a sperimentare, ma abbiamo pensato di chiedere anche qui.
Ho un carico simultaneo sul tavolo ma è di sola lettura.
explain analyze
l'utilizzo di un indice per la ricerca?