ABAP Debugging & Performance Tuning
Target: Advanced ABAP Developer yang ingin menguasai teknik diagnostik mendalam, investigasi crash dump sistem, penelusuran alur eksekusi, serta optimasi performa program berskala enterprise. Versi: SAP NetWeaver AS ABAP 7.40+ / 7.50+ & SAP S/4HANA (T-Code
ST22, New ABAP Debugger,ST05,SAT). Prasyarat: Telah memahami ABAP Internal Tables, ABAP Database & Open SQL, dan ABAP Objects (OOP).
Gambaran Umum
Menulis kode program yang berjalan benar hanyalah separuh dari tugas seorang software engineer enterprise. Separuh tugas lainnya yang jauh lebih krusial adalah memastikan program tersebut andal, tidak pernah memicu crash fatal, dan berjalan dengan efisiensi performa tinggi saat memproses jutaan data transaksi secara serentak.
Sistem SAP menyediakan rangkaian perangkat diagnostik berstandar industri kelas dunia. Dengan menguasai New ABAP Debugger, analisis crash ST22, pemantauan query database ST05, serta profiling CPU SAT, Anda dapat membongkar masalah tersembunyi (bottleneck), melacak bug logika hingga ke level variabel memori, dan mengoptimalkan kecepatan program hingga puluhan kali lipat.
Cara Belajar
π’ Fundamental
β Pahami New ABAP Debugger (Breakpoints, Watchpoints, navigasi tombol), perintah /h, dan cara membaca Short Dump di ST22.
π‘ Lanjutan
β Kuasai SQL Trace (ST05) untuk menemukan Table Scan dan Runtime Profiling (SAT) untuk mengukur distribusi waktu CPU vs Database.
π οΈ Praktik
β Bangun mini project investigasi dan refactoring program lambat akibat query N+1 di dalam loop menjadi kode batch berkecepatan tinggi.Mental model alur diagnostik pemecahan masalah di sistem SAP:
Gejala Masalah Terjadi di Sistem
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β 1. Program berhenti tiba-tiba dengan layar merah dump β
β ββ> Buka T-Code ST22 (Analisis Baris Crash & Error) β
β β
β 2. Program menghasilkan kalkulasi data yang keliru β
β ββ> Gunakan New ABAP Debugger (Breakpoints/Watch) β
β β
β 3. Program berjalan lambat (Jam pasir berputar lama) β
β ββ> Buka T-Code ST05 (Cek Index & Waktu Eksekusi DB)β
β ββ> Buka T-Code SAT (Cek % CPU ABAP vs % Database) β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββHafalan:
ST22 β T-Code ABAP Runtime Errors: repositori pencatatan seluruh crash dump sistem
/h β Perintah ajaib di Command Box untuk mengaktifkan debugger pada layar mana pun
Watchpoint β Titik henti debugger yang otomatis aktif saat isi variabel tertentu berubah
ST05 β T-Code Performance Trace: menganalisis query Native SQL dan indeks database
SAT β T-Code Runtime Analysis: mengukur durasi konsumsi waktu eksekusi kode ABAP
JDBG β Perintah debugger khusus untuk menelusuri Background Job di T-Code SM37
Table Scan β Pembacaan seluruh isi tabel fisik database tanpa indeks (Penyebab utama lemot)Daftar Isi
π’ Fundamental
- Navigasi Tingkat Lanjut New ABAP Debugger
- Jenis-Jenis Breakpoint (Session, User, External)
- Watchpoints: Menghentikan Program Saat Nilai Berubah
- Trik Debugging: Perintah /h & Background Job (JDBG)
- Investigasi Runtime Crash / Short Dump (T-Code ST22)
- Top 5 Short Dump Paling Sering di Sistem Produksi
π‘ Lanjutan
- Analisis Query Database dengan SQL Trace (T-Code ST05)
- Mendeteksi Table Scan vs Index Scan di ST05
- Runtime Profiling & Identifikasi Bottleneck (T-Code SAT)
- Strategi Refactoring Kode Lambat (N+1 Query Problem)
π οΈ Praktik
π Ringkasan & Referensi
1. π’ Navigasi Tingkat Lanjut New ABAP Debugger
Konsep
Ketika breakpoint terpicu, layar SAP GUI beralih ke antarmuka New ABAP Debugger.
Tombol Fungsi Navigasi Utama
| Tombol Keyboard | Nama Operasi | Fungsi |
|---|---|---|
F5 | Single Step | Menjalankan tepat satu baris instruksi saat ini. Jika baris tersebut memanggil Subroutine, Function Module, atau Method, kursor debugger akan masuk ke dalam kode fungsi tersebut. |
F6 | Execute | Menjalankan instruksi saat ini sebagai satu kesatuan utuh tanpa masuk ke dalam implementasi fungsi. |
F7 | Return | Menyelesaikan sisa eksekusi fungsi/method saat ini seketika dan langsung melompat kembali ke program pemanggil. |
F8 | Continue | Melanjutkan eksekusi program dengan kecepatan normal hingga menemui breakpoint berikutnya atau selesai. |
Shift + F8 | Run to Cursor | Melompati eksekusi hingga mencapai baris posisi kursor mouse saat ini. |
TIP
Mengubah Nilai Variabel On-The-Fly: Di panel tab Variables, Anda dapat mengubah isi nilai variabel mana pun secara langsung saat program sedang berhenti di debugger, lalu klik tombol pensil/simpan. Fitur ini sangat bermanfaat untuk mensimulasikan skenario edge-case tanpa perlu mengubah kode program!
2. π’ Jenis-Jenis Breakpoint (Session, User, External)
Konsep
- Session Breakpoint: Hanya aktif untuk sesi logon SAP GUI Anda saat ini. Otomatis terhapus saat Anda menutup window/logoff.
- User Breakpoint: Aktif untuk seluruh sesi akun user Anda di server bersangkutan (bertahan hingga 2 jam).
- External Breakpoint: Wajib digunakan jika Anda mendebug program yang dipicu melalui antarmuka eksternal (seperti Web App, SAP Fiori, OData Service, atau pemanggilan RFC dari sistem luar).
3. π’ Watchpoints: Menghentikan Program Saat Nilai Berubah
Konsep
Bayangkan Anda memiliki internal table dengan 10.000 baris record, dan sebuah bug aneh terjadi hanya saat ID pelanggan bernilai 'CUST-8888'. Jika Anda menggunakan tombol F5/F6 secara manual, Anda harus menekan tombol tersebut ribuan kali!
Solusinya adalah menggunakan Watchpoint:
- Saat berada di debugger, klik tab Breakp./Watchpoints.
- Klik tombol Create Watchpoint.
- Masukkan nama variabel (contoh:
ls_cust-client_id). - Masukkan kondisi logika (contoh:
ls_cust-client_id = 'CUST-8888'). - Tekan F8 (Continue).
- Program akan melaju dengan kecepatan penuh dan secara otomatis berhenti mendadak tepat pada milidetik ketika nilai variabel tersebut berubah menjadi
'CUST-8888'!
4. π’ Trik Debugging: Perintah /h & Background Job (JDBG)
Konsep
1. Perintah /h untuk Layar Dialog Terkunci
Jika ada jendela pop-up dialog yang tidak menyediakan opsi breakpoint langsung:
- Ketikkan perintah /h di kotak perintah T-Code kiri atas, lalu tekan tombol Enter.
- Layar akan memunculkan pesan status di bawah: βDebugging switched onβ.
- Lakukan tindakan berikutnya (misal: klik tombol OK di pop-up). Debugger akan langsung terbuka seketika!
2. Debugging Background Job (Perintah JDBG)
Bagaimana cara mendebug program batch yang hanya berjalan di latar belakang (Background Job)?
- Buka T-Code
SM37(Simple Job Selection). - Cari job Anda yang berstatus Finished atau Canceled.
- Letakkan kursor pada baris job tersebut.
- Ketikkan perintah
JDBGdi kotak perintah T-Code lalu tekan Enter. - Sistem akan mereproduksi jalannya job tersebut di dalam lingkungan Dialog Debugger interaktif baris per baris!
5. π’ Investigasi Runtime Crash / Short Dump (T-Code ST22)
Konsep
Ketika program mengalami kegagalan fatal yang tidak tertangani, sistem membekukan transaksi dan mencatat laporan forensik lengkap di T-Code ST22 (ABAP Runtime Errors).
Anatomi Laporan Forensik ST22
Layar Laporan ST22:
βββ 1. What happened? β Ringkasan insiden (contoh: Division by zero)
βββ 2. Error analysis β Penjelasan teknis rinci mekanisme crash
βββ 3. How to correct the error β Solusi rekomendasi SAP untuk memperbaiki kode
βββ 4. Source Code Extract β Potongan kode tempat program crash (Tanda >>>)
β 145 DATA lv_hasil TYPE i.
β >>> 146 lv_hasil = lv_total / lv_pembagi.
β 147 WRITE: / lv_hasil.
β
βββ 5. Contents of system fieldsβ Rekaman nilai sy-subrc, sy-uname, sy-tabix saat crash6. π’ Top 5 Short Dump Paling Sering di Sistem Produksi
| Nama Short Dump | Penyebab Utama | Solusi Perbaikan |
|---|---|---|
COMPUTE_INT_ZERODIVIDE | Pembagian angka dengan nilai nol (x / 0). | Selalu validasi IF lv_pembagi <> 0 sebelum operasi hitung. |
CONVT_NO_NUMBER | Teks alfanumerik dipaksa masuk ke variabel tipe angka. | Validasi teks input hanya berisi digit sebelum konversi. |
TABLE_INVALID_INDEX | Mengakses indeks tabel yang tidak ada (INDEX 0 atau melampaui lines()). | Periksa keberadaan indeks atau gunakan OPTIONAL. |
TIME_OUT | Eksekusi dialog melebihi batas waktu maksimal CPU server (biasanya 600β1200 detik). | Pecah logika ke Background Job (SM36) atau optimalkan query SQL. |
TSV_TNEW_PAGE_ALLOC_FAILED | Server kehabisan alokasi RAM karena query menarik jutaan baris tanpa filter. | Batasi query dengan UP TO n ROWS dan perketat klausa WHERE. |
7. π‘ Analisis Query Database dengan SQL Trace (T-Code ST05)
Konsep
T-Code ST05 adalah alat investigasi utama untuk memantau waktu respons query database secara real-time.
Langkah Penggunaan ST05
- Buka T-Code
ST05. - Pada panel Trace Type, centang SQL Trace.
- Klik tombol Activate Trace.
- Di window sesi terpisah, jalankan program atau transaksi Anda.
- Kembali ke window
ST05, klik Deactivate Trace. - Klik Display Trace untuk melihat daftar seluruh query database yang dieksekusi.
8. π‘ Mendeteksi Table Scan vs Index Scan di ST05
Konsep
Pada laporan hasil rekaman ST05, perhatikan kolom Execution Plan dan Duration:
Tanda Bahaya Kinerja di ST05:
1. TABLE ACCESS FULL (Table Scan):
β Database membaca seluruh blok disk dari awal sampai akhir karena tidak ada indeks
yang cocok dengan klausa WHERE. Sangat lambat jika tabel memiliki jutaan baris!
2. INDEX UNIQUE SCAN / INDEX RANGE SCAN:
β Query memanfaatkan indeks database dengan optimal. Sangat cepat (hitungan milidetik).Jika query Anda menghasilkan TABLE ACCESS FULL, tambahkan kolom Primary Key pada klausa WHERE atau buatkan Secondary Index baru pada tabel di SE11.
9. π‘ Runtime Profiling & Identifikasi Bottleneck (T-Code SAT)
Konsep
T-Code SAT (atau SE30 pada sistem klasik) digunakan untuk mengukur di mana waktu program Anda paling banyak terkuras.
Hasil analisis SAT menampilkan rasio konsumsi waktu:
Distribusi Waktu Eksekusi:
βββ ABAP Time : 12% (Logika internal kode program)
βββ Database Time : 85% (Waktu menunggu jawaban query database) <-- BOTTLENECK UTAMA!
βββ System Time : 3% (Overhead komunikasi kernel)Jika Database Time mendominasi di atas 70%, fokus perbaikan utama Anda adalah mengoptimalkan query database, bukan memusingkan perulangan kode ABAP.
10. π‘ Strategi Refactoring Kode Lambat (N+1 Query Problem)
Masalah N+1 Query
Penyebab nomor satu program SAP berjalan lambat adalah query database yang diletakkan di dalam perulangan LOOP AT:
" KODE BURUK (N+1 Query Problem - Sangat Lambat!):
" Jika lt_header berisi 10.000 pesanan, database dipanggil 10.001 kali!
LOOP AT lt_header INTO DATA(ls_header).
SELECT * FROM vbap
WHERE vbeln = @ls_header-vbeln
INTO TABLE @DATA(lt_items). " <-- Membebani koneksi jaringan database berulang kali!
ENDLOOP.Solusi Optimal: Array Fetch dengan FOR ALL ENTRIES
Tarik seluruh rincian data sekaligus dalam satu panggilan jaringan tunggal:
" KODE OPTIMAL (Array Fetch - 100x Lebih Cepat!):
IF lt_header IS NOT INITIAL.
SELECT vbeln, posnr, matnr, netwr
FROM vbap
FOR ALL ENTRIES IN @lt_header
WHERE vbeln = @lt_header-vbeln
INTO TABLE @DATA(lt_all_items).
ENDIF.
" Baca di dalam loop menggunakan memori RAM yang sangat cepat:
SORT lt_all_items BY vbeln.
LOOP AT lt_header INTO DATA(ls_hdr).
READ TABLE lt_all_items WITH KEY vbeln = ls_hdr-vbeln TRANSPORTING NO FIELDS BINARY SEARCH.
" Proses baris data dari memori RAM...
ENDLOOP.11. π οΈ Mini Project: Investigasi & Refactoring Kasus Nyata Program Lambat
Tujuan
Membangun program simulasi perbandingan performa (ZREP_PERFORMANCE_BENCHMARK). Program ini mengeksekusi dua pendekatan pemrosesan data identik: Pendekatan Lambat ( query berulang) versus Pendekatan Optimal (Array Fetch terindeks in-memory), mengukur waktu eksekusi masing-masing dalam satuan mikrodetik, dan menampilkan persentase lonjakan efisiensi performa yang dicapai.
Fitur
- Simulasi pemrosesan 5.000 transaksi bisnis.
- Pengukuran durasi eksekusi menggunakan stopwatch sistem
GET RUN TIME. - Komparasi rasio kecepatan komputasi secara transparan.
- Laporan hasil audit optimasi performa ke layar Basic List.
Konsep yang Digunakan
- Pengukuran waktu runtime via instruksi
GET RUN TIME FIELD. - Perbandingan penelusuran linier vs penelusuran biner (
BINARY SEARCH). - Eliminasi overhead pemanggilan query berulang.
Langkah Implementasi
- Siapkan Data Dummy Transaksi: Buat 5.000 record master dan 10.000 record rincian di memori.
- Uji Pendekatan A (Lambat): Penelusuran linier satu per satu.
- Uji Pendekatan B (Optimal): Penelusuran terurut via binary search.
- Hitung Selisih Waktu: Kalkulasikan peningkatan efisiensi persentase.
- Cetak Hasil Benchmark: Tampilkan data komparasi ke layar.
Kode Lengkap Program
*&---------------------------------------------------------------------*
*& Report ZREP_PERFORMANCE_BENCHMARK
*&---------------------------------------------------------------------*
*& Mini Project: Pembuktian Benchmark Optimasi Algoritma & Performa
*&---------------------------------------------------------------------*
REPORT zrep_performance_benchmark LINE-SIZE 85.
TYPES: BEGIN OF ty_item,
id TYPE i,
nilai TYPE i,
END OF ty_item.
DATA: lt_master TYPE STANDARD TABLE OF i WITH EMPTY KEY,
lt_items TYPE STANDARD TABLE OF ty_item WITH EMPTY KEY,
ls_item TYPE ty_item,
lv_start TYPE i,
lv_end TYPE i,
lv_time_a TYPE i,
lv_time_b TYPE i.
START-OF-SELECTION.
WRITE: / sy-uline(80).
WRITE: / '|', (76) 'BENCHMARK KOMPARASI EFISIENSI PERFORMA EKSEKUSI' CENTERED, '|'.
WRITE: / sy-uline(80).
" 1. Siapkan 5.000 data master dan 10.000 data item di memori
DO 5000 TIMES.
APPEND sy-index TO lt_master.
APPEND VALUE ty_item( id = sy-index nilai = sy-index * 2 ) TO lt_items.
ENDDO.
" -------------------------------------------------------------------
" PENGUJIAN METODE A: PENCARIAN LINIER (PENDEKATAN LAMBAT)
" -------------------------------------------------------------------
GET RUN TIME FIELD lv_start.
LOOP AT lt_master INTO DATA(lv_key_a).
" Pembacaan linier tanpa BINARY SEARCH (Mirip query berulang di dalam loop)
READ TABLE lt_items INTO ls_item WITH KEY id = lv_key_a.
ENDLOOP.
GET RUN TIME FIELD lv_end.
lv_time_a = lv_end - lv_start.
" -------------------------------------------------------------------
" PENGUJIAN METODE B: PENCARIAN BINER TERURUT (PENDEKATAN OPTIMAL)
" -------------------------------------------------------------------
GET RUN TIME FIELD lv_start.
SORT lt_items BY id ASCENDING.
LOOP AT lt_master INTO DATA(lv_key_b).
" Pembacaan biner logaritmik O(log N)
READ TABLE lt_items INTO ls_item WITH KEY id = lv_key_b BINARY SEARCH.
ENDLOOP.
GET RUN TIME FIELD lv_end.
lv_time_b = lv_end - lv_start.
" -------------------------------------------------------------------
" CETAK HASIL EVALUASI
" -------------------------------------------------------------------
DATA(lv_selisih) = lv_time_a - lv_time_b.
DATA(lv_persen) = ( lv_selisih * 100 ) / lv_time_a.
WRITE: / '| Parameter Uji Coba: 5.000 Data Record Loop & Pencarian', (28) ' ', '|',
/ sy-uline(80),
/ '| Metode A (Pencarian Linier / N+1 Style) : ', (12) lv_time_a, 'mikrodetik', (14) ' ', '|',
/ '| Metode B (Binary Search / Array Style) : ', (12) lv_time_b, 'mikrodetik', (14) ' ', '|',
/ sy-uline(80),
/ '| PENINGKATAN EFISIENSI KECEPATAN : ', (6) lv_persen, '% LEBIH CEPAT!', (19) ' ', '|',
/ sy-uline(80).Hasil Akhir
---------------------------------------------------------------------------------
| BENCHMARK KOMPARASI EFISIENSI PERFORMA EKSEKUSI |
---------------------------------------------------------------------------------
| Parameter Uji Coba: 5.000 Data Record Loop & Pencarian |
---------------------------------------------------------------------------------
| Metode A (Pencarian Linier / N+1 Style) : 452.120 mikrodetik |
| Metode B (Binary Search / Array Style) : 4.810 mikrodetik |
---------------------------------------------------------------------------------
| PENINGKATAN EFISIENSI KECEPATAN : 98 % LEBIH CEPAT! |
---------------------------------------------------------------------------------12. π Ringkasan & Peta Ingatan
Peta Konsep Debugging & Performance
ABAP Debugging & Performance Tuning
βββ 1. New ABAP Debugger
β βββ Navigasi Tombol (F5 Single, F6 Execute, F7 Return, F8 Continue)
β βββ Breakpoints (Session, User, External untuk Fiori/OData)
β βββ Watchpoints (Berhenti otomatis saat nilai variabel berubah)
β βββ Trik (/h di command box & JDBG untuk background job)
βββ 2. Analisis Crash ST22
β βββ Anatomi Laporan (What happened, Error analysis, Code extract >>>)
β βββ Top Dump (ZERODIVIDE, CONVT_NO_NUMBER, TIME_OUT, ALLOC_FAILED)
βββ 3. Pemantauan & Profiling Kinerja
βββ ST05 (SQL Trace untuk deteksi TABLE SCAN vs INDEX SCAN)
βββ SAT (Runtime Analysis untuk rasio % CPU ABAP vs % Database)
βββ Golden Rules (Eliminasi N+1 query via FOR ALL ENTRIES & Binary Search)13. π Cheat Code Diagnostik 10 Detik
ST22 β Buka catatan crash short dump sistem
/h β Aktifkan debugger seketika di command box
SM37 β JDBG β Debugging background job yang sudah lewat
ST05 β Analisis durasi dan indeks query database
SAT / SE30 β Profiling konsumsi waktu CPU vs Database
F5 β Melangkah satu baris instruksi (masuk fungsi)
F6 β Mengeksekusi satu baris instruksi (tanpa masuk)
F8 β Melanjutkan eksekusi penuh (Continue)
GET RUN TIME FIELD lv_t. β Mengukur waktu komputasi mikrodetik14. π§ Urutan Belajar Selanjutnya
Setelah menguasai teknik diagnostik dan optimasi performa tingkat lanjut, gerbang menuju arsitektur modern SAP di SAP S/4HANA kini terbuka:
1. π’ ABAP Dasar (Fondasi sintaks & kontrol alur)
β
βΌ
2. π’ ABAP Data Dictionary (Struktur tabel & tipe data)
β
βΌ
3. π’ ABAP Internal Tables (Manipulasi array in-memory)
β
βΌ
4. π‘ ABAP Database & Open SQL (Akses data database)
β
βΌ
5. π‘ ABAP Modularization & Integration (Function modules & BAPI)
β
βΌ
6. π‘ ABAP Reports & ALV Grid (Visualisasi data pelaporan)
β
βΌ
7. π‘ ABAP Objects (OOP) (Paradigma berorientasi objek)
β
βΌ
8. π΄ ABAP Enhancement Framework (Kustomisasi Clean Core)
β
βΌ
9. π΄ ABAP Debugging & Performance Tuning (Selesai pada modul ini)
β
βΌ
10. π΄ ABAP Core Data Services (CDS Views) & AMDP
β Masuki era modern S/4HANA: Paradigma Code-to-Data, pemodelan semantik data di Eclipse ADT, dan penulisan SQLScript via AMDP.
β
βΌ
11. π΄ ABAP RESTful Application Programming (RAP)
β Arsitektur generasi terbaru untuk aplikasi SAP Fiori.Lanjutkan ke modul berikutnya: ABAP Core Data Services (CDS Views) & AMDP (Modul 10).