Ini salah satu kebiasaan lama yang sering “lolos review”.
Procedure:
-
Jalan normal
-
Tidak error
-
Bahkan terasa aman
Padahal… dampaknya bisa panjang.
Contoh yang Sering Saya Temui
Secara logika:
-
Setiap data langsung disimpan
-
Kalau gagal, yang lain sudah aman
Secara sistem:
👉 ini mimpi buruk performa
Kenapa COMMIT di Loop Itu Bermasalah?
Setiap COMMIT:
-
Menulis redo log
-
Melepas undo
-
Sinkron ke disk
Kalau loop:
-
1.000 baris → 1.000 COMMIT
-
10.000 baris → 10.000 COMMIT
Tidak heran kalau:
-
I/O naik
-
Session lain melambat
-
Database terasa “berat”
Dan tidak ada error sama sekali.
“Tapi Saya Takut Datanya Setengah Jalan…”
Ini alasan paling sering.
Dan memang valid dalam kasus tertentu.
Tapi sebelum taruh COMMIT di loop, tanyakan dulu:
-
Apakah datanya benar-benar besar?
-
Apakah bisa di-rollback bersama?
-
Apakah failure-nya sering?
Sering kali jawabannya: tidak.
Pola yang Lebih Aman
Kalau memungkinkan:
Atau lebih baik lagi:
Satu commit.
Lebih bersih.
Lebih ringan.
Kapan COMMIT di Loop Masih Masuk Akal?
Ada, tapi jarang.
Biasanya kalau:
-
Proses sangat panjang (jam-an)
-
Data independen per baris
-
Failure sebagian masih bisa diterima
Dan itupun:
-
Commit per batch (misalnya tiap 1.000 baris)
-
Bukan setiap baris
Catatan Pengalaman Kerja
Saya pernah menemukan job malam yang:
-
Tidak pernah error
-
Tapi membuat backup melambat
Setelah dicek:
-
Ada COMMIT di loop
-
Data puluhan ribu
Setelah diubah:
-
Commit per batch
-
Waktu eksekusi turun drastis
-
Beban server lebih stabil
Prinsip yang Saya Pegang Sekarang
Kalau lihat:
-
COMMIT di loop
dan -
Data bukan kecil
Saya langsung curiga.
Bukan salah,
tapi sering tidak perlu.
Penutup
COMMIT itu penting,
tapi tempatnya juga penting.
PL/SQL bukan cuma soal “jalan atau tidak”,
tapi soal bagaimana dampaknya ke sistem.
Sampai catatan Rabu berikutnya 👋

0 comments:
Post a Comment