Domanda

Ho un'applicazione che genera molti dati che devono essere inseriti rapidamente (qualcosa di circa 13 milioni di record). Uso JPA 2.0/Hibernate con Postgres 9.1 e sono riuscito a ottenere una buona prestazione (circa 25k inserti al secondo) con multi-threading e batch di inserti ogni migliaia di inserti circa, completando una corsa intera in circa 8 minuti.

Tuttavia, ho notato che avevo alcune delle chiavi straniere che avevano un indice mancante, che vorrei davvero avere da un punto di vista di analisi per eseguire il drill -down nei dati, sia anche eliminare i dati su una esecuzione specifica. Sfortunatamente, quando ho aggiunto in questi 3 indici alla tabella che sta ottenendo la maggior parte degli inserti, le prestazioni sono scese drasticamente a circa 3k al secondo.

C'è un modo per evitare che queste prestazioni rallentano? So che un'opzione è quella di far cadere gli indici prima di una corsa e ricrearli alla fine. Un'altra opzione più goffa è generare invece i dati della tabella più grande in un file e utilizzare COPY. Immagino di poterlo fare solo sulla tabella più grande della relazione, a causa dei valori chiave estere che avrei bisogno di sapere (generato attraverso sequenze).

Entrambe le alternative sembrano essere hack. C'è qualche altra soluzione, forse un po 'meno invadente sull'applicazione? Qualche impostazione per dire a Postgres di differire l'indicizzazione o qualcosa del genere?

Qualsiasi idea benvenuta.

Nessuna soluzione corretta

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a dba.stackexchange
scroll top