Direct-path insert
Direct-path insert (hint APPEND Oracle)
Direct-path insert este un mod de scriere Oracle care ocolește buffer cache-ul și plasează datele direct în datafile-uri, deasupra high-water mark-ului segmentului. Se activează prin hint-ul /*+ APPEND */ pe o instrucțiune INSERT și este utilizat în mod obișnuit în operațiuni de încărcare în masă pentru a reduce overhead-ul de I/O și volumul de redo generat.
Cum funcționează #
În timpul unui Direct-path insert, Oracle nu caută blocuri libere în segmentul existent: alocă spațiu nou dincolo de high-water mark și scrie direct pe disc, ocolind complet buffer pool-ul. Generarea de redo este minimă (sau zero în modul NOLOGGING), ceea ce face operațiunea semnificativ mai rapidă decât un conventional insert pe volume mari de date.
INSERT /*+ APPEND */ INTO target_table
SELECT * FROM source_table;
COMMIT;
Până la COMMIT, tabela este blocată la scriere pentru celelalte sesiuni: niciun alt proces nu poate insera rânduri în aceeași tabelă pe durata tranzacției.
Când se folosește și limitări #
Direct-path insert este potrivit pentru pipeline-uri ETL, încărcări în masă și popularea tabelelor de staging. Vine cu câteva restricții operaționale importante:
- Constrângeri de integritate: constrângerile
CHECKșiNOT NULLsunt evaluate, dar cheile externe pot necesita dezactivare sau amânare pentru a păstra performanța. - Trigger-e: trigger-ele
BEFORE/AFTER INSERT ROWnu sunt executate în modul direct-path. - Assertions (Oracle 23ai+): comportamentul cu Assertions trebuie verificat caz cu caz, deoarece mecanismul de validare diferă față de conventional insert.
În mediile cu Assertions active, testarea explicită este necesară înainte de adoptarea Direct-path insert în producție.