Sql-server'da okumaya hazır anlık görüntüyü etkinleştirirsek ne gibi riskler var?


70

Burada , her satırda bazı ekstra verilerin depolanacağını, bu nedenle performans düşüşü görebileceğimizi, ancak başka hangi risklerin bulunduğunu okudum.

Örneğin. Bu veritabanının kurtarılmasını etkiler mi? Bundan yararlanmak için yapmamız gereken başka bir şey var mı?

Bu komutları çalıştırmayı planlıyorum:

ALTER DATABASE DatabaseName SET READ_COMMITTED_SNAPSHOT ON
ALTER DATABASE DatabaseName SET ALLOW_SNAPSHOT_ISOLATION ON

Bunun bize bir işlem daha yakın bir şey vereceğine inanıyorum ki eğer bir işlem diğer işlemlerin güncelleniyorsa eski verileri okuyabilir. Bu doğru mu?

Bunu inceliyorum, çünkü SQL Server 2005’te kilitleme sorunlarından bıktım. Bu durumun, kullanıcıların zaman zaman görülen kilitlenmelerini azaltacağını, uygulamamızın genel performansına yardımcı olabileceğini ve geliştiricilerimizin işlem yapmadan birden fazla işlem yapmasını teşvik edeceğini umuyorum. korku.

Yanıtlar:


48

özet

  1. Kilitleme sorunlarınız varsa, kodunuzla ilgili bir sorun yaşarsınız: veritabanı motoru değil
  2. Bu sihirli bir mermi değil
  3. Daha fazla sorun ekleyebilirsiniz

Yük

Aynı zamanda tempdb ve üzerindeki yükü artacaktır CPU . Ayrıca bakınız:

Emniyet

En önemlisi, anlık görüntü yalıtımı birçok durumda varsayılan olarak güvenli değildir . Oku "Anlık izolasyon" (Vikipedi) yazma-çarpıklık anormalliklere daha fazlası. Bir sonraki bölüm, bunun üstesinden gelmek için "Anlık Görüntü Yalıtımını Seri Hale Getirilebilir Yapma" dır.

Bu nedenle, genel olarak, anlık görüntü yalıtımı, olası tuzakları veya olası çözümleri takdir etmeyebilecek, kullanıcıya önemsiz olmayan kısıtlamaları sürdürme sorununun bir kısmını koyar. Bu transferin tersi daha iyi performans.

Ayrıca bakınız:


35

Bu eski bir iplik olduğunu biliyorum ama büyük bir derecede anlık görüntü yalıtım için söyleyebilirim olduğunu sihirli mermi. Okuyucular ve yazarlar arasındaki tüm engellemeleri ortadan kaldıracaktır . Ancak edecek değil diğer yazarlar engellemesini yazarları engeller. Bunun baska yolu yok.

Tecrübelerime göre, TEMPDB üzerindeki ek yük ihmal edilebilir ve blok okuyucuların azaltılmasında satır sürümünün faydaları çok büyük.

Başvuru için, satır sürüm (anlık görüntü yalıtım) Oracle Neredeyse 20 yıllık deneyim için üzerinde çalıştığım engelleme okuyucular ve Oracle veritabanları olmadan izolasyon kazanmak için yıllardır kullandığı yöntemdir uzak SQL Server does daha az engelleme konularında. Çoğu SQL geliştiricisi, yalnızca varsayılan ayarları kullanan veritabanlarına karşı kodlarını test ettiklerinden, anlık görüntü yalıtımını kullanmakta tereddütlüdür.


26

Diğer cevaplara eklemek için birkaç ek puan:

SET ALLOW_SNAPSHOT_ISOLATION ONyalnızca bir veritabanında anlık görüntü yalıtımını etkinleştirir. Bundan yararlanabilmek için yeniden kodlamanız ve SET TRANSACTION ISOLATION LEVEL SNAPSHOTbaşvurmak istediğiniz işlemlerde kullanmanız gerekir. Güncelleme çakışması hatalarını ele almak için arama kodunun değiştirilmesi gerekecektir.

Sonrasında SET READ_COMMITTED_SNAPSHOT ON, okunan ifadeler satır versiyonlamasını kullandı. Not, bu sadece okumalar için ifade seviyesi satır versiyonudur . Güncellemeler için, "gerçek" satır alınır ve güncelleme kilitleri uygulanır. Satır-Sürüm Oluşturma Tabanlı Yalıtım Düzeylerini Anlama bölümündeki Davranış Özeti bölümüne bakın.

Her iki yol da, ayrıntılı testler yapmadan, sisteme tamamen yeni bir sorun kümesi girme ihtimaliniz vardır.


19

Bunun bize bir işlem daha yakın bir şey vereceğine inanıyorum ki eğer bir işlem diğer işlemlerin güncelleniyorsa eski verileri okuyabilir. Bu doğru mu?

Evet, bu doğru .

Gbn'nin cevabındaki bağlantıları okumakta fayda var ve aynı şeyin Anlık Görüntü Yalıtım modunda SQL Server'daki Oracle'ın varsayılan MVCC'si için de geçerli olduğuna inanıyorum. Potansiyel tuzakları anlarsanız, IMO'ya ilave zorlukların (Oracle bakış açısıyla konuşma) çok daha fazla yarar sağladığını ve tabii ki bazı kilitleme sorunlarının yasal olarak ortadan kalktığını ve bunun da MVCC'nin (bu sınıfın bir sınıfı olduğu) olduğunu ekleyeceğim. kod sorunları nedeniyle ortadan kalkmayacak kilitleme sorunları, ancak bunu anladığınızı varsayıyorum).


9

SQL Server DB kullanan tüm projelerimizde SNAPSHOT ISOLATION kullanıyoruz. Hatalı uygulama kodu nedeniyle değil, varsayılan sayfa kilitleme ve satır kilitleme davranışından kaynaklanan 1205 SQL Hatası yok.

Performansın etkisi çok az ve şu ana kadar 7 yıl geçti, SNAPSHOT ISOLATION ile ilgili herhangi bir sorun olmadan yüzlerce milyon işlem farklı sistemlerde işlendi.

Birkaç farklı iş parçacığının iş kritik bilgilerini paralel olarak tek satırda güncellediği durumlar oldukça istisnaidir ve SNAPSHOT ISOLATION'ın herhangi bir tutarsızlık sorununun nedeni olma olasılığı sıfıra yakındır.

Bir OLTP sisteminiz varsa, tasarımla birçok konudaki mevcut satır verisine dayanan tek satır güncellemeleri söz konusuysa tabii ki SNAPSHOTS bu gibi durumlarda kabul edilemez.


-2

Biz aktif ve 4 çalışan tuhaf bir seçim sql deyimi hiç çekirdek ve tüm olursa olsun tüm db engelledi. RCSI'yi kapatmak bu sorunu giderdi. Varsayılan olarak değil, diğer kilitlenmelerle karşılaştığınızda onu açardım.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.