Tento článek popisuje optimalizaci PL/SQL stored procedures v Oracle databázi, která přinesla dramatické zrychlení nočních dávek.
Noční batch přepočítává pojistné pro 800 000 smluv — trvá 6 hodin. Noční okno je 4 hodiny. DBMS_PROFILER ukázal: row-by-row processing, COMMIT uvnitř smyčky, zadne BULK operace.
BULK COLLECT a FORALL¶
BULK COLLECT načte data do kolekce najednou. FORALL provede DML v jednom roundtripu. LIMIT 10000 pro rozumnou spotřebu pameti. COMMIT po davce misto po radku.
SQL misto PL/SQL¶
Funkce prepsana jako SQL CASE expression. Celý batch nahrazen jedním UPDATE příkazem. 800 000 context switchu eliminovano. Výsledek: 6 hodin na 8 minut.
Parallel DML¶
PARALLEL hint zkrátil batch na 3 minuty. Pozor — vyzaduje exkluzivní zámek na tabulku.
Pouceni¶
Row-by-row je hlavní performance killer v PL/SQL. Preferujte BULK operace nebo ciste SQL. Profilujte — nehádejte bottleneck.
Potřebujete pomoc s implementací?
Naši experti vám pomohou s návrhem, implementací i provozem. Od architektury po produkci.
Kontaktujte nás