Baru-baru ini salah satu aplikasi ASP.NET kami menampilkan kesalahan kebuntuan basis data dan saya diminta untuk memeriksa dan memperbaiki kesalahan tersebut. Saya berhasil menemukan penyebab kebuntuan adalah prosedur tersimpan yang secara ketat memperbarui tabel dalam kursor.
Ini adalah pertama kalinya saya melihat kesalahan ini dan tidak tahu cara melacak dan memperbaikinya secara efektif. Saya mencoba semua cara yang mungkin saya tahu, dan akhirnya menemukan bahwa tabel yang sedang diperbarui tidak memiliki kunci utama! untungnya itu adalah kolom identitas.
Saya kemudian menemukan pengembang yang membuat database untuk penyebaran kacau. Saya menambahkan kunci utama dan masalah terpecahkan.
Saya merasa bahagia dan kembali ke proyek saya, dan melakukan riset untuk menemukan alasan kebuntuan itu ...
Rupanya, itu adalah kondisi menunggu melingkar yang menyebabkan kebuntuan. Pembaruan tampaknya membutuhkan waktu lebih lama tanpa kunci primer daripada dengan kunci primer.
Saya tahu itu bukan kesimpulan yang jelas, itu sebabnya saya memposting di sini ...
- Apakah kunci utama yang hilang adalah masalahnya?
- Apakah ada kondisi lain yang menyebabkan kebuntuan selain (saling pengecualian, tahan dan tunggu, tidak ada preemption dan menunggu bundar)?
- Bagaimana saya mencegah dan melacak kebuntuan?