şükela:  tümü | bugün
  • basit tabirle sqlserverda bir tablo üzerinde bir sorgu çalıştırılırken (özellikle güncelleme yapılırken yani insert, delete, update) aynı tablo üzerinde başka bir sorgu çalıştırılmak istendiğinde dönen ölüm haberidir. sqlserver sorguya cevap vermez. ve transaction sonlandırılıncaya kadar ölüm haberi devam eder.

    büyük sorunlardan biridir.
    sql serverda güncel ve yeni bilginin çok sorun yaratmayacağı durumlarda sorgulamalar içerisinde with (nolock) ifadesi kullanılarak halledilmeye çalışılır. ama işe yaramadığı bir sürü durum vardır. gene de denenmelidir.

    mesela ekşisözlük gibi bir web sitesinin verileri sözkonusuysa rahatlıkla kullanılabilir. ama sözgelimi finansal işlemlerin olduğu bir database ise ve veriler üzerindeki değişiklikler tamamlanmadan istek yapan kullanıcıya eski veriler gösterilmeyecek ise bu durumda kullanılamaz. hiç bir işletme müşterisine henüz değişmiş yada değişmekte olan bir verinin kısa bir süre önceki halini göndermek istemez. örnek: hesabında 100.000 dolar olan bir kullanıcının parasının tamamını çektiği halde o an yapılan başka bir sorgu sonucunda halen hesabında 100.000 dolar görünmesi saçma olur.

    with(nolock) kullanımı: veritabanımızda users tablosundan 1102 id nolu kullanıcının name ve surname alanlarını döndüren sorguyu yazarken şu şekilde olabilir:

    select name,surname from users with(nolock) where userid = 1102

    (bkz: deadlock victim)
    (bkz: transaction isolation level)
  • (bkz: circular dependency) ile karıştırılabilen olay. ikisini ayırt etmek için en temelde şöyle özetlenebilir ; deadlock runtime sırasında oluşurken, circular dependency compile time sırasında oluşur.

    bahsi geçen durumla ilgili karşı karşıya kalındığı zaman yapılacak çokta birşey kalmamıştır. sessizce process kapatılır ve hiçbirşey olmamışta kodu yazmaya devam ediyorsun gibi takılırsın. o yüzden çokta şaapmamalı. ha birde ; (bkz: mexican standoff)
  • sql server transaction'larında yaşanan deadlock olaylarını sql server profiler ile de tespit edip hangi hareket sebebi ile oluştuğu hakkında fikir edinebiliriz.
  • deadlock için gerekli kosullar
    1. karşılıklı dışlama (mutual exclusion): en azından bir kaynağın, diğer prosesler tarafından kullanılamadığı bir durumda kilitlenmeden söz etmek mümkündür.
    2. sahiplenme ve bekleme (hold and wait): bir proses en azından bir kaynağı elinde tutmalı ve diğer prosesler tarafından tutulan ek bir kaynağa gereksinim duymalıdır.
    3. geri alınamaz kaynak(no preemption): bir prosese atanan kaynaklar, işletim sistemi tarafından prosesin kendi isteği dışında elinden alınamıyorsa.
    4. döngüsel bekleme (circular waiting): proseslerin gereksinim duyduğu kaynakları, karşılıklı olarak birbirlerinden beklemesi durumudur.

    a) kilitlenme durumunda kullanılan yaklaşımlar
    1- sistemin kilitlenme durumuna girmemesini sağlamak.
    1.1) kilitlenmeyi önlemek
    1.2) kilitlenmeden kaçınmak
    2-sistem kilitlenme durumuna girdiyse bu durumdan kurtulmasını sağlamak.

    (bkz: deadlock detection)
  • iki process'in karşılıklı olarak bir diğerine ait olan resource'u isteme durumunda meydana gelen kilitlenme durumu. dining philosophers problemi bu duruma örnektir.
  • yukarıda çoğunlukla yazılım terimi gibi girilmiş de şükela bir film, onun da aynı isimli soundtrack'idir aynı zamanda (bkz: can).