Back to blog
Database

Database Deadlock: Saat Dua Fitur Saling Menunggu Sampai Kiamat

Aplikasimu tidak ada yang error. RAM aman. CPU santai. Tapi kenapa saat dua user mencoba memproses pembayaran, sistemnya tiba-tiba membeku (freeze) permanen?

super admin·13 Juli 2026·2 min read
Database Deadlock: Saat Dua Fitur Saling Menunggu Sampai Kiamat
Article Content

Bayangin Dua Orang di Lorong Sempit...

Bayangin Budi dan Siti berjalan berlawanan arah di sebuah lorong sempit yang hanya muat satu orang. Budi tidak mau minggir sebelum Siti lewat, dan Siti tidak mau minggir sebelum Budi lewat. Keduanya berdiri diam saling tatap-tatapan. Kalau tidak ada yang mau mengalah, mereka akan berdiri di lorong itu sampai hari kiamat.

Di dunia pemrograman, situasi macet total tanpa jalan keluar ini disebut Deadlock (Jalan Buntu).

Masalahnya: Berebut Sumber Daya (Database Lock)

Di artikel sebelumnya (Race Condition), kita tahu bahwa Database SQL menggunakan sistem "Gembok" (Locking) agar data tidak tumpang tindih. TAPI, gembok ini bisa jadi senjata makan tuan!

Skenarionya begini di *Backend* (Misal fitur Tukar Kado):

  1. Proses A: Menggembok data Kado Budi, lalu meminta gembok Kado Siti.
  2. Proses B (di milidetik yang sama): Menggembok data Kado Siti, lalu meminta gembok Kado Budi.

Apa yang terjadi?
Proses A tidak bisa selesai karena menunggu Kado Siti dilepas. Proses B tidak bisa selesai karena menunggu Kado Budi dilepas. Kedua proses ini akan Hang/Freeze selamanya di memori server, menyedot CPU hingga akhirnya API-mu me-return Error 504 Gateway Timeout!

Nah, Gimana Cara Database Menyelesaikannya?

Database SQL modern (seperti PostgreSQL atau MySQL) punya "Otak Polisi" di belakang layarnya.

  • Saat Polisi Database melihat ada dua proses yang saling tatap-tatapan lebih dari beberapa detik (Deadlock Detection), ia harus mengambil tindakan tegas.
  • Polisi akan Membunuh (Kill/Rollback) salah satu proses secara paksa!
  • Proses B dikorbankan dan dibatalkan (memunculkan pesan "Deadlock found when trying to get lock"). Berkat pengorbanan Proses B, akhirnya gembok Kado Siti terlepas, dan Proses A bisa jalan sampai sukses.

Intinya: Sebagai Backend Developer, jika kamu menemui Error Deadlock di log sistemmu, jangan panik. Tangkap error tersebut menggunakan try-catch, lalu suruh kodemu untuk mengulang (Retry) eksekusi Proses B tadi dalam beberapa detik kemudian. Pengaturan urutan eksekusi adalah seni sejati dalam *Database Architecture*.

Mau langsung pakai template?

Jelajahi template gratis dan premium di TampilKit untuk mempercepat proses development project kamu.

Browse Templates