none
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED kullanımı RRS feed

  • Soru

  • Merhaba Arkadaşlar,

    Ms sql, ben her rapor başında bu sorguyu yazıyorum çok şubeli kullanım durumlarında vs bir sorun oluşturur mu 

    SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

    10 Ekim 2019 Perşembe 11:53

Yanıtlar

Tüm Yanıtlar

  • Merhaba,

    Raporlamada bildiğim kadarıyla ilgili tablonun sonun WITH(NOLOCK) ifadesi eklenirse sorun olmaz. 

    Nette bulduğum dökümanı ;

    Transaction Isolation Level lar nedir?

    SQL Server'da verilerimizi güncellerken, diğer transaction ların verilere nasıl ulaşacağı, lock ların nasıl ve na kadar süre tutulacağı, verilerin nasıl okunacağı  "transaction isolation level" ile karar verilir.

    Isolation için   eş zamanlı olarak veri güncellemesi yapan transactionların etkilerinden, diğer transactionları koruma yeteneğidir diyebiliriz.
    Her transaction, transaction tamamlanana kadar, güncellen veriyi kilitler.  Veri okuma işlemlerinde, "transaction isolation levels", diğer transaction lar tarafından yapılan değişikliklerin etkilerinden koruma seviyeleridir.

    Daha düşük seviye bir isolation level seçilirse, aynı anda birçok kullanıcı veriyer ulaşabilir ancak okunan veriler tutarlı veya güncel olmayabilir.
    Yüksek seviye bir isolation level, okunan verinin tutarlılığını arttırken, bir transaction'ın başka transaction ları kilitlemesine neden olabilir.
    Veri tutarlılığının üç temel yan etkisi vardır. 
      dirty read :  Bir transaction tarafından bir veri güncellenirken verinin okunmasıdır ve veri güncel olmayabilir
      nonrepeatable read: Bir başka transaction, aynı satırı birçok kez okur ve her seferinde başka bir veri okursa oluşur.
      phantom read : Bir silme veya yeni kayıt ekleme işlemi sırasında, aynı anda okuma işlemi yapılıyorsa ve bu kayıtlar da okunan kayıt setinin içerisindeyse oluşur.  Bu kullanıcının kayıtları eklemediğini düşünmesine ve ikince kez kayıt eklemeye çalışmasına neden olabilir.

    En üst seviye isolation "SERIALIZABLE" dır. Tüm transaction her zaman aynı datayı alırlar ancak çok kullanıcılı sistemlerde, bir kullanıcının yaptığı işlem, diğer kullanıcıların işlemlerini etkiler. 

    En alt seviye isolation ise "READ UNCOMMITTED" dır.  Diğer transactionlar tarafından güncellenmeye başlamış, ancak henüz commit işlemi tamamlanmamış veriler okunabilir.


    READ UNCOMMITTED Başka transactionlardan tarafından güncellenmekte olan, ancak henüz güncelleme işlemleri tamamlanmamış veriler okunabilir.

    READ COMMITTED  Başka transactionlar tarafından güncellenmekte olan veriler, güncelleme işlemi tamamlanana kadar okunamazlar.  Bu "dirty read" i engeller.  Veri, her bir transaction arasında başka bir transaction tarafından güncellenebilir. Bu seviyede nonrepeatable veya phantom read ler oluşabilir.
    READ COMMITTED seviyesi, SQL Server'ın varsayılan isolation seviyesidir. 

    REPEATABLE READ Güncellenen ancak henüz commit edilmeyen veriler, commit edilene kadar okunamaz veya başka transaction lar tarafından güncellenemez.

    SNAPSHOT Veri herhangi bir zamanda okunabilir.  Okuma işlemi başladığında verinin son hali ne ise, o veri okunur.  Okuma için başlayan transaction, sadece başlamadan önce commit edilmiş verileri farkeder. Transaction başladıktan sonra başka bir transaction veriyi güncellerse, bu güncellemeleri görmez. 

    SERIALIZABLE  Commit edilmemiş veri okunamaz veya güncellenemez. Bir transaction, okunan veri aralığına ait key ile, okuma işlemi tamamlanana kadar insert işlemi yapamaz.

    11 Ekim 2019 Cuma 06:10
  • ACID prensipleri diye aratın en başından güzelce öğrenin derim ben.

    www.cihanyakar.com

    11 Ekim 2019 Cuma 07:12
  • Vedat hocam bir raporda 10 adet tablo var ise hepsinin başına yazmak gerekiyor o yüzden yukarıda buna gerek kalmıyor zaten
    11 Ekim 2019 Cuma 08:27
  • Vedat hocam bir raporda 10 adet tablo var ise hepsinin başına yazmak gerekiyor o yüzden yukarıda buna gerek kalmıyor zaten
    Rapor işi canlı sistemlerde sıkıntıdır. Kilidi ortadan kaldırman sana geçici bir çözüm sunacaktır. Analitik işlemler için farklı bir sunucu kullanma konusunda tecrübe kazanmanı öneririm. Yoksa kim ne rapor alıyor diye mal mal bakar durursun #BOTS.

    www.cihanyakar.com

    11 Ekim 2019 Cuma 08:35
  • Cihan hocam biraz daha açabilir misiniz  farklı bir sunucu derken  her halukarda canlı ortamdan anlık veri almamız gerekiyor ve bunu raporlamamız gerekiyor.
    21 Ekim 2019 Pazartesi 08:32
  • Cihan hocam biraz daha açabilir misiniz  farklı bir sunucu derken  her halukarda canlı ortamdan anlık veri almamız gerekiyor ve bunu raporlamamız gerekiyor.
      Rapor sunucusu oluştur ve rapor istekleri o sunucuya gelsin ve o sunucudan alınsın.  



    21 Ekim 2019 Pazartesi 10:19