Ho una tabella di 500 milioni di righe (e in crescita)
Ho fatto quanto segue per migliorare le prestazioni degli inserti:
Dal lato del database:
- ha eliminato tutti gli indici e i vincoli
- registrazione disabilitata
Dal lato dell'applicazione:
- passato da entità gestite JPA a query di inserimento native, aggiunto APPEND suggerimento Oracle alla query
- ha tentato di eseguire il commit in batch per 1k / 2k / 3k di righe
- ho provato a scrivere in parallelo (thread multipli, numero thread = al numero core sul server) su una tabella
Questo mi ha dato circa 300 file al secondo
Inoltre provato:
- scrivere in parallelo in batch su più tabelle (per raggruppare e quindi tornare ai risultati utilizzando UNION)
Questo mi ha dato circa 1k righe al secondo, ma su tabelle vuote. Ma quando ho riempito le tabelle con dati fittizi (200 milioni di ciascuno), la velocità degli inserti è scesa a 250 - 300 al secondo.
Qualcuno potrebbe suggerire cos'altro posso fare per accelerare gli inserti? Fondamentalmente voglio capire qual è (cosa potrebbe essere) il collo di bottiglia per primo.
UPD: la tabella è partizionata per data di inserimento, la tabella ha circa 60 colonne - la maggior parte delle colonne sono VARCHAR2 (2000 BYTE)
/*+APPEND*/
suggerimento viene ignorato sugli inserti a riga singola (se non si ha INSERT INTO ... SELECT
problemi con l'appendice). (3) È necessario impostare un esempio di Caricatore SQL * con direct=true
per stabilire una linea di base come suggerito da @parsifal.