Jumat, 09 Maret 2012

Deadlock (Deadly Embrace)

Keadaan yang sangat sulit untuk dikontrol timbul pada saat proses update membutuhkan dua record. Record Y dibaca tetapi tidak mungkin di-update sampai record Z dibaca. Record Y harus dikunci selama proses update. Urutan prosesnya adalah sebagai berikut:

Transaksi A:
  1. Kunci record Y
  2. Baca record Y 
  3. Baca record Z
  4. Update record Y
  5. Buka kunci record Y
Keadaan deadlock akan timbul jika transaksi lain mengunci record Z dan tidak dibuka sampai transaksi ini telah membaca record Y. Proses untuk transaksi B adalah sebagai berikut:

Transaksi B:
  1. Kunci record Z
  2. Baca record Z
  3. Baca record Y
  4. Update record Z
  5. Buka kunci record Y
Kedua transaksi tersebut membentuk deadlock sebagai berikut:

Transaksi A mengunci record Y
Transaksi A membaca record Y
Transaksi B mengunci record Z
Transaksi B membaca record Z

Transaksi A memcoba untuk membaca record Z tetapi record tersebut terkunci.
Transaksi B mencoba untuk membaca record Y tetapi record tersebut terkunci.

Kedua transaksi menunggu untuk record yang diinginkan tetapi ternyata record tersebut terkunci tidak ada program untuk membuka record yang terkunci.

Deadlock dapat terjadi untuk seluruh file. Sebagai contoh: misalkan proses 1 menggunakan file A dan memerlukan file B tetapi proses 2 menggunakan file B dan memerlukan file A.

Sebuah sistem manajemen basisdata harus dirancang untuk mengetahui dan memperbaiki situasi deadlock. Jika hal ini terjadi pada distribusi data masalahnya akan menjadi lebih kompleks. Pada contoh diatas record Y dan record Z berada pada lokasi yang berbeda secara geografis.

Transaksi A mengunci record X sampai transaksi ini telah membaca record Y
Transaksi B mengunci record Y sampai transaksi ini telah membaca record Z
Transaksi C mengunci record Z sampai transaksi ini telah membaca record X

Ada dua cara untuk mengatasi masalah deadlock:

Pertama : memundurkan kembali pemrosesan pada saat deadlock terjadi dan 
Kedua    : mencegah terjadinya deadlock secara keseluruhan.

Untuk mengatasi deadlock perangkat lunak harus dapat mendeteksi suatu transaksi yang tergantung (hang up), dan menghentikan sementara salah satu program yang menyebabkan terjadinya deadlock. Dalam hal ini seluruhnya harus dimundurkan pada saat terjadinya program yang terhenti tanpa mempengaruhi integritas dari data yang disimpan.

Pemunduran kembali dan memulai program berikutnya harus dilakukan secara otomatis dan harus bersifat transparan terhadap programnya sendiri. Untuk melakukan ini program membutuhkan synchronization points. Sistem ini akan menyimpan transaksi yang diikuti oleh synchronization point sampai program membuat suatu commitment, misalnya data betul sudah di-update.

Sistem akan memundurkan program deadlock sampai pada synchronization point dan kemudian memulai kembali program tersebut.

Memundurkan kembali dari suatu deadlock dapat menjadi kompleks pada lingkungan distribusi maka lebih baik adalah mencegah terjadinya deadlock. Hal ini dapat dilakukan melalui timestamping transaksi dan memastikan operasi datanya dilakukan dalam urutan timestamp.

Tidak ada komentar:

Posting Komentar