Dağıtılmış DBMS - Deadlock Handling
Bu bölüm, veritabanı sistemlerindeki kilitlenme işleme mekanizmalarını gözden geçirir. Hem merkezi hem de dağıtılmış veritabanı sistemindeki kilitlenme işleme mekanizmalarını inceleyeceğiz.
Kilitlenme nedir?
Kilitlenme, her işlem başka bir işlem tarafından kilitlenen bir veri öğesini beklerken, iki veya daha fazla işleme sahip bir veritabanı sisteminin bir durumudur. Bir kilitlenme, bekleme grafiğindeki bir döngü ile gösterilebilir. Bu, köşelerin işlemleri ifade ettiği ve kenarların veri öğelerini beklediğini gösterdiği yönlendirilmiş bir grafiktir.
Örneğin, aşağıdaki bekleme grafiğinde, T1 işlemi, T3 tarafından kilitlenen veri öğesi X'i beklemektedir. T3, T2 tarafından kilitlenen Y'yi ve T2, T1 tarafından kilitlenen Z'yi beklemektedir. Bu nedenle, bir bekleme döngüsü oluşturulur ve işlemlerin hiçbiri yürütülmeye devam edemez.
Merkezi Sistemlerde Kilitlenme Yönetimi
Kilitlenme ile başa çıkmak için üç klasik yaklaşım vardır:
- Kilitlenme önleme.
- Kilitlenmeden kaçınma.
- Kilitlenme tespiti ve kaldırılması.
Üç yaklaşımın tümü hem merkezi hem de dağıtılmış bir veritabanı sistemine dahil edilebilir.
Kilitlenme Önleme
Kilitlenme önleme yaklaşımı, herhangi bir işlemin kilitlenmelere yol açacak kilitler edinmesine izin vermez. Kural, aynı veri maddesinin kilitlenmesi için birden fazla işlem talep edildiğinde, bunlardan sadece birine kilit verilmesidir.
En popüler kilitlenme önleme yöntemlerinden biri, tüm kilitlerin önceden edinilmesidir. Bu yöntemde, bir işlem, yürütmeye başlamadan önce tüm kilitleri alır ve tüm işlem süresi boyunca kilitleri korur. Başka bir işlem zaten edinilmiş kilitlerden herhangi birine ihtiyaç duyuyorsa, ihtiyaç duyduğu tüm kilitler kullanılabilir olana kadar beklemesi gerekir. Bu yaklaşım kullanılarak, bekleyen işlemlerin hiçbirinde kilitlenmediği için sistemin kilitlenmesi önlenir.
Kilitlenme Önleme
Kilitlenme önleme yaklaşımı, kilitlenmeleri oluşmadan önce ele alır. Beklemenin kilitlenmeye yol açıp açmadığını belirlemek için işlemleri ve kilitleri analiz eder.
Yöntem kısaca şu şekilde ifade edilebilir. İşlemler yürütülmeye başlar ve kilitlemeleri gereken veri öğelerini talep eder. Kilit yöneticisi, kilidin mevcut olup olmadığını kontrol eder. Mevcutsa, kilit yöneticisi veri maddesini tahsis eder ve işlem kilidi alır. Bununla birlikte, öğe, uyumsuz moddaki başka bir işlem tarafından kilitlenirse, kilit yöneticisi, işlemi bekleme durumunda tutmanın bir kilitlenmeye neden olup olmayacağını test etmek için bir algoritma çalıştırır. Buna göre, algoritma işlemin bekleyip bekleyemeyeceğine veya işlemlerden birinin iptal edilip edilmeyeceğine karar verir.
Bu amaç için iki algoritma vardır: wait-die ve wound-wait. T1'in halihazırda T2 tarafından kilitlenmiş bir veri öğesini kilitlemeye çalıştığı T1 ve T2 olmak üzere iki işlem olduğunu varsayalım. Algoritmalar aşağıdaki gibidir -
Wait-Die- T1, T2'den büyükse, T1'in beklemesine izin verilir. Aksi takdirde, T1 T2'den daha gençse, T1 durdurulur ve daha sonra yeniden başlatılır.
Wound-Wait- T1, T2'den daha eskiyse, T2 durdurulur ve daha sonra yeniden başlatılır. Aksi takdirde, T1'in T2'den küçük olması durumunda, T1'in beklemesine izin verilir.
Kilitlenme Algılama ve Kaldırma
Kilitlenme algılama ve kaldırma yaklaşımı, bir kilitlenme algılama algoritmasını periyodik olarak çalıştırır ve olması durumunda kilitlenmeyi ortadan kaldırır. Bir işlem kilit için bir talepte bulunduğunda kilitlenme olup olmadığını kontrol etmez. Bir işlem bir kilit talep ettiğinde, kilit yöneticisi bunun mevcut olup olmadığını kontrol eder. Mevcutsa, işlemin veri öğesini kilitlemesine izin verilir; aksi takdirde işlemin beklemesine izin verilir.
Kilitleme talepleri verilirken herhangi bir önlem alınmadığı için bazı işlemler kilitlenebilir. Deadlock'ları tespit etmek için, kilit yöneticisi periyodik olarak bekleme grafiğinin döngüleri olup olmadığını kontrol eder. Sistem kilitlenmişse, kilit yöneticisi her döngüden bir kurban işlemi seçer. Kurban durdurulur ve geri alınır; ve daha sonra yeniden başlatıldı. Kurban seçimi için kullanılan yöntemlerden bazıları şunlardır:
- En genç işlemi seçin.
- En az veri öğesi içeren işlemi seçin.
- En az sayıda güncelleme yapan işlemi seçin.
- En az yeniden başlatma ek yüküne sahip işlemi seçin.
- İki veya daha fazla döngüde ortak olan işlemi seçin.
Bu yaklaşım, öncelikle işlemleri düşük olan ve kilit isteklerine hızlı yanıt verilmesi gereken sistemler için uygundur.
Dağıtık Sistemlerde Kilitlenme Yönetimi
Dağıtılmış bir veri tabanı sistemindeki işlem işleme de dağıtılır, yani aynı işlem birden fazla sitede işlenebilir. Merkezi bir sistemde bulunmayan dağıtılmış bir veritabanı sistemindeki iki ana kilitlenme sorunu şu şekildedir:transaction location ve transaction control. Bu endişeler giderildikten sonra, kilitlenmeler, herhangi bir kilitlenme önleme, kilitlenme önleme veya kilitlenme algılama ve kaldırma yoluyla ele alınır.
İşlem Yeri
Dağıtık bir veritabanı sistemindeki işlemler birden çok sitede işlenir ve birden çok sitede veri öğelerini kullanır. Veri işleme miktarı, bu siteler arasında eşit olarak dağıtılmamaktadır. İşlem süresi de değişir. Bu nedenle, aynı işlem bazı sitelerde aktif, diğerlerinde pasif olabilir. Bir sitede birbiriyle çakışan iki işlem bulunduğunda, bunlardan biri etkin değil durumda olabilir. Bu durum merkezi bir sistemde ortaya çıkmaz. Bu endişeye işlem yeri sorunu denir.
Bu sorun, Papatya Zinciri modeli ile ele alınabilir. Bu modelde, bir işlem bir siteden diğerine geçtiğinde belirli ayrıntıları taşır. Ayrıntılardan bazıları, gerekli tabloların listesi, gerekli sitelerin listesi, ziyaret edilen tabloların ve sitelerin listesi, henüz ziyaret edilmemiş tabloların ve sitelerin listesi ve türlerle birlikte kazanılan kilitlerin listesidir. İşlem tamamlama veya iptal etme ile sona erdikten sonra, bilgiler ilgili tüm sitelere gönderilmelidir.
İşlem Kontrolü
İşlem kontrolü, dağıtılmış bir veri tabanı sisteminde bir işlemin işlenmesi için gerekli sitelerin belirlenmesi ve kontrol edilmesiyle ilgilidir. İşlemin nerede işleneceğine ve kontrol merkezinin nasıl belirleneceğine ilişkin birçok seçenek vardır, örneğin:
- Kontrol merkezi olarak bir sunucu seçilebilir.
- Kontrol merkezi bir sunucudan diğerine gidebilir.
- Kontrol etme sorumluluğu birkaç sunucu tarafından paylaşılabilir.
Dağıtılmış Kilitlenme Önleme
Tıpkı merkezi kilitlenme önlemede olduğu gibi, dağıtılmış kilitlenme önleme yaklaşımında, bir işlem, yürütülmeye başlamadan önce tüm kilitleri almalıdır. Bu, kilitlenmeleri önler.
İşlemin girdiği site, kontrol eden site olarak belirlenir. Kontrol eden site, öğeleri kilitlemek için veri öğelerinin bulunduğu sitelere mesajlar gönderir. Sonra onay için bekler. Tüm siteler veri öğelerini kilitlediklerini onayladığında işlem başlar. Herhangi bir site veya iletişim bağlantısı başarısız olursa, işlem onarılıncaya kadar beklemelidir.
Uygulama basit olsa da, bu yaklaşımın bazı dezavantajları vardır -
Kilitlerin önceden edinilmesi, iletişim gecikmeleri için uzun bir süre gerektirir. Bu işlem için gereken süreyi artırır.
Site veya bağlantı hatası durumunda sitelerin düzelmesi için bir işlemin uzun süre beklemesi gerekir. Bu sırada çalışan sitelerde eşyalar kilitlenir. Bu, diğer işlemlerin yürütülmesini engelleyebilir.
Kontrol eden site başarısız olursa, diğer sitelerle iletişim kuramaz. Bu siteler, kilitli veri öğelerini kilitli durumda tutmaya devam eder ve bu da engellemeye neden olur.
Dağıtılmış Kilitlenme Önleme
Merkezi sistemde olduğu gibi, dağıtılmış kilitlenme önleme, oluşmadan önce kilitlenmeyi ele alır. Ek olarak, dağıtılmış sistemlerde işlem konumu ve işlem kontrolü konularının ele alınması gerekir. İşlemin dağıtılmış niteliği nedeniyle aşağıdaki çatışmalar ortaya çıkabilir -
- Aynı sitede iki işlem arasında çelişki.
- Farklı sitelerdeki iki işlem arasında çatışma.
Çatışma durumunda, işlemlerden biri durdurulabilir veya dağıtılmış bekleme-ölme veya dağıtılmış yara bekleme algoritmalarına göre beklemeye bırakılabilir.
T1 ve T2 olmak üzere iki işlem olduğunu varsayalım. T1, Site P'ye ulaşır ve o sitede T2 tarafından zaten kilitlenmiş olan bir veri öğesini kilitlemeye çalışır. Bu nedenle, Site P'de bir çakışma var. Algoritmalar aşağıdaki gibidir -
Distributed Wound-Die
T1, T2'den daha büyükse, T1'in beklemesine izin verilir. T1, P Sitesi, T2'nin tüm sitelerde başarılı bir şekilde taahhüt ettiğini veya iptal ettiğini belirten bir mesaj aldıktan sonra yürütmeye devam edebilir.
T1, T2'den küçükse, T1 durdurulur. Site P'deki eşzamanlılık kontrolü, T1'in T1'i iptal etmek için ziyaret ettiği tüm sitelere bir mesaj gönderir. Kontrol eden site, T1'in tüm sitelerde başarıyla iptal edildiğini kullanıcıya bildirir.
Distributed Wait-Wait
T1, T2'den daha eskiyse, T2'nin iptal edilmesi gerekir. T2, Site P'de etkinse, Site Bağlantı Noktası T2'yi iptal eder ve geri alır ve ardından bu mesajı diğer ilgili sitelere yayınlar. T2, Site P'yi terk ettiyse ancak Site Q'da aktifse, Site P, T2'nin iptal edildiğini yayınlar; Site L daha sonra T2'yi iptal eder ve geri alır ve bu mesajı tüm sitelere gönderir.
T1, T1'den küçükse, T1'in beklemesine izin verilir. T1, P Sitesi T2'nin işlemeyi tamamladığına dair bir mesaj aldıktan sonra yürütmeye devam edebilir.
Dağıtılmış Kilitlenme Tespiti
Tıpkı merkezi kilitlenme algılama yaklaşımı gibi, kilitlenmelerin oluşmasına izin verilir ve tespit edilirse kaldırılır. Bir işlem bir kilit isteği gönderdiğinde sistem herhangi bir kontrol gerçekleştirmez. Uygulama için global bekleme grafikleri oluşturulur. Küresel bekleme grafiğindeki bir döngünün varlığı, kilitlenmeleri gösterir. Ancak, işlem ağdaki kaynakları beklediğinden kilitlenmeleri tespit etmek zordur.
Alternatif olarak, kilitlenme algılama algoritmaları zamanlayıcıları kullanabilir. Her işlem, bir işlemin bitmesinin beklendiği bir zaman periyoduna ayarlanan bir zamanlayıcı ile ilişkilendirilir. Bu süre içinde bir işlem bitmezse, zamanlayıcı kapanır ve olası bir kilitlenme olduğunu gösterir.
Kilitlenme ile başa çıkmak için kullanılan diğer bir araç, bir kilitlenme detektörüdür. Merkezi bir sistemde, bir kilitlenme detektörü vardır. Dağıtılmış bir sistemde, birden fazla kilitlenme dedektörü olabilir. Bir kilitlenme algılayıcısı, kontrolü altındaki siteler için kilitlenmeler bulabilir. Dağıtık bir sistemde kilitlenme tespiti için üç alternatif vardır.
Centralized Deadlock Detector - Bir alan, merkezi kilitlenme detektörü olarak belirlenmiştir.
Hierarchical Deadlock Detector - Bir dizi kilitlenme detektörü hiyerarşi içinde düzenlenmiştir.
Distributed Deadlock Detector - Tüm siteler, kilitlenmelerin tespit edilmesi ve kaldırılmasına katılır.