Direct-path insert
Direct-path insert (Oracle APPEND hint)
Il Direct-path insert è una modalità di scrittura Oracle che bypassa il buffer cache e inserisce i dati direttamente nei datafile, al di sopra dell’high-water mark del segmento. Si attiva tramite il hint /*+ APPEND */ su un’istruzione INSERT e viene usato tipicamente in operazioni di caricamento massivo per ridurre l’overhead di I/O e il volume di redo generato.
Come funziona #
Durante un Direct-path insert Oracle non cerca blocchi liberi nel segmento esistente: alloca nuova spazio oltre l’high-water mark e scrive direttamente su disco, saltando il buffer pool. Il redo generato è minimo (o nullo in modalità NOLOGGING), il che rende l’operazione molto più veloce rispetto a un conventional insert su grandi volumi.
INSERT /*+ APPEND */ INTO target_table
SELECT * FROM source_table;
COMMIT;
Fino al COMMIT la tabella è bloccata in scrittura per altre sessioni: nessun altro processo può inserire righe nella stessa tabella durante la transazione.
Quando si usa e limiti #
Il Direct-path insert è indicato per ETL, bulk load e popolamento di tabelle di staging. Presenta però alcune restrizioni operative rilevanti:
- Vincoli di integrità: i vincoli
CHECKeNOT NULLvengono valutati, ma i vincoli di foreign key possono essere disabilitati o differiti per mantenere le prestazioni. - Trigger: i trigger
BEFORE/AFTER INSERT ROWnon vengono eseguiti in modalità direct-path. - Assertions (Oracle 23ai+): il comportamento con le Assertions va verificato caso per caso, poiché il meccanismo di validazione differisce dal conventional insert.
In ambienti con Assertions attive, è necessario testare esplicitamente il comportamento prima di adottare il Direct-path insert in produzione.