Analisis bottleneck database menggunakan JMeter dilakukan dengan mengombinasikan JDBC Request sampler, Listener pemantauan, serta metrics dari sisi server database (MySQL/PostgreSQL) seperti slow query log dan connection pool utilization. Pengujian performa database wajib memisahkan latensi jaringan, waktu eksekusi kueri SQL, dan antrean thread pool aplikasi agar akar masalah ditemukan secara presisi.
Langkah Teknis Setup JMeter untuk Database Testing
Sebelum mendeteksi bottleneck, pastikan konfigurasi Test Plan di JMeter mampu menstimulasi beban realistis pada database target tanpa menjadi sumber bottleneck itu sendiri.
1. Konfigurasi JDBC Connection Configuration
Database URL: jdbc:mysql://localhost:3306/nama_db?useSSL=false&allowPublicKeyRetrieval=true
JDBC Driver Class: com.mysql.cj.jdbc.Driver
Username: root
Password: password
Pool max: 50
Timeout: 10000
2. Struktur Test Plan
- Thread Group: Atur jumlah Users (Threads), Ramp-up Period, dan Loop Count.
- JDBC Request: Masukkan kueri SQL (SELECT, INSERT, UPDATE) yang ingin diuji.
- Listeners: Gunakan Summary Report, Aggregate Report, dan View Results Tree (hanya untuk debugging awal).
Matriks Identifikasi Bottleneck Database
Tabel berikut memetakan gejala yang muncul di JMeter dengan akar permasalahan nyata pada sistem database:
| Gejala di JMeter | Metrik Server DB | Akar Permasalahan (Bottleneck) | Solusi Perbaikan |
|---|---|---|---|
Error Too many connections |
Max connections tercapai | Kapasitas connection pool aplikasi kekecilan atau koneksi tidak ditutup. | Tingkatkan max_connections di DB atau optimalkan pooling HikariCP. |
| High Response Time (>2000ms) | CPU Utilization 100% | Kueri SQL tidak memiliki indeks (Full Table Scan) atau Join terlalu kompleks. | Buat Index pada kolom pencarian, optimalkan execution plan (EXPLAIN). |
| Throughput stagnan meski users naik | Disk I/O Wait tinggi (iowait) | Bottleneck pada storage (HDD/SSD lambat) atau ukuran Buffer Pool RAM kurang. | Upgrade ke NVMe SSD, perbesar innodb_buffer_pool_size. |
| Deadlock Errors di Log | Lock wait timeout exceeded | Konkurensi tinggi pada baris tabel yang sama tanpa manajemen transaksi yang baik. | Redesign struktur tabel, perpendek durasi transaksi, gunakan optimasi row-level locking. |
Langkah Analisis Lapangan (Troubleshooting)
Jangan hanya mengandalkan angka rata-rata (average) dari JMeter. Lakukan tahapan investigasi mendalam ini secara paralel:
1. Aktifkan Slow Query Log
Pada MySQL, pastikan slow_query_log aktif untuk menangkap kueri yang memakan waktu lebih lama dari ambang batas (misal > 1 detik). Analisis menggunakan mysqldumpslow untuk melihat kueri mana yang paling sering mendominasi.
2. Monitor Resource Server secara Real-time
Gunakan tool seperti htop, iotop, atau APM (Application Performance Monitoring) seperti Prometheus dan Grafana untuk memantau penggunaan CPU, Memori, dan Disk I/O saat JMeter sedang melakukan Load Test.
3. Evaluasi Execution Plan (EXPLAIN)
Ambil kueri SQL bermasalah dari hasil JMeter, lalu jalankan perintah EXPLAIN [Query SQL] langsung di klien database. Pastikan kolom type tidak bernilai ALL (yang menandakan terjadinya Full Table Scan) dan pastikan penggunaan possible_keys berjalan optimal.