Nocni batch prepocitava pojistne pro 800 000 smluv — trva 6 hodin. Nocni okno je 4 hodiny. DBMS_PROFILER ukazal: row-by-row processing, COMMIT uvnitr smycky, zadne BULK operace.
BULK COLLECT a FORALL¶
BULK COLLECT nacte data do kolekce najednou. FORALL provede DML v jednom roundtripu. LIMIT 10000 pro rozumnou spotrebu pameti. COMMIT po davce misto po radku.
SQL misto PL/SQL¶
Funkce prepsana jako SQL CASE expression. Cely batch nahrazen jednim UPDATE prikazem. 800 000 context switchu eliminovano. Vysledek: 6 hodin na 8 minut.
Parallel DML¶
PARALLEL hint zkratil batch na 3 minuty. Pozor — vyzaduje exkluzivni zamek na tabulku.
Pouceni¶
Row-by-row je hlavni performance killer v PL/SQL. Preferujte BULK operace nebo ciste SQL. Profilujte — nehádejte bottleneck.