Veritabanı tutarlılığı da DBMS performansını ölçmek için önemli göstergelerden biridir. Şu anda, çoğu ticari veritabanı (DB2, SQL Server), eşzamanlı işlem yürütmesinin seri olarak yapılmasını sağlayan eşzamanlı kontrol için İki Aşamalı Kilitleme (2PL) protokolünü kullanır. Ancak, 2PL okuma veya yazmadan önce herhangi bir veriyi kilitlemelidir. Engelleme uyumluluk matrisinde S kilitleri (Share Locks) ve X kilitleri (Özel Kilitler) uyumsuzdur, yani işlem 1 veri A üzerinde okuma işlemi yapıyorsa (artı bir S kilidi) ve işlem 2 veriye yazmak (bir X kilidi eklemek) istiyorsa, işlem 2 işlem 1'in veri A üzerindeki S kilidini serbest bırakmasını beklemelidir. Çok Versiyonlu Uyum Kontrolü (MVCC) bu sorunu iyi çözer. Çok versiyonlu bir sistemde, her yazma veri yeni bir sürüm üretir ve okuma işlemi gerektiğinde uygun sürümü okuyabilir, böylece okuma ve yazma işlemleri birbirini engellemez. MVCC, eşzamanlılığı artırır, ancak aynı zamanda birden fazla sürümü korumanın depolama yükünü de getirir.
Microsoft SQL Server veritabanı motoru, mevcut işlem izolasyon seviyesinin yeni bir uygulamasını - committed reads'i sunar; bu okumalar, satır sürümleme kullanılarak ifade düzeyinde anlık görüntüler sağlar. SQL Server veritabanı motoru ayrıca işlem izolasyonuna yeni bir seviye getirir - satır sürümlemesini de kullanan işlem düzeyinde anlık görüntüler sağlayan anlık görüntüler.
READ_COMMITTED_SNAPSHOT veritabanı seçeneğini ON olarak ayarlamak, satır sürümleme kullanılarak belirlenmiş okuma izolasyonunu etkinleştirir. ALLOW_SNAPSHOT_ISOLATION veritabanı seçeneğini ON'a ayarladığınızda snapshot izolasyonu sağlanır. Her iki seçenek veritabanı için etkinleştirildiğinde, veritabanı motoru değiştirilen her satırın sürümünü korur. Bir işlem satırı değiştirdiğinde, değişiklikten önceki satırın görüntüsü sürüm mağazasındaki bir sayfaya kopyalanır. Sürüm deposu, tempdb içindeki veri sayfalarının bir koleksiyonudur. Birden fazla işlem değiştirme satırı varsa, o satırın birden fazla versiyonu bir versiyon zincirinde bağlanır. Satır sürüm kullanarak yapılan bir okuma işlemi, işlem veya ifade başlatma anında yapılan her satırın son versiyonunu geri alır.
SQL Server 2008 için yazılmış veya SQL Server'a yeni gelen uygulamalar, READ_COMMITTED_SNAPSHOT veritabanı seçeneği AÇIKken okuma taminleri için işlem izolasyon seviyesini belirterek satır sürümlemeyle okuma commitlerinin izolasyonunu uygular. Tüm okumalar, ifadenin başladığı sırada gerçekleşen satır versiyonuna bakacaktır. Bu, verinin ifade düzeyinde bir anlık görüntüsünü sağlayacaktır.
SQL Server için yazılmış uygulamalar, ALLOW_SNAPSHOT_ISOLATION veritabanı seçeneği AÇık olduğunda anlık görüntü işlem izolasyon seviyesini belirterek anlık görüntü izolasyonunu uygular. Bir anlık işlem işlemindeki tüm okumalar, işlem başladığında yapılan satır versiyonuna bakacaktır. Bu, verinin işlem düzeyinde bir anlık görüntüsü sağlayacaktır.
Satır tabanlı izolasyon seviyeleri kullanan işlemlerde, okumalar verilerde paylaşılan kilitler talep etmez. Bu, satır sürüm kullanan okuyucuların diğer okuyucuların veya yazarların aynı verilere erişmesini engellemediği anlamına gelir. Benzer şekilde, yazar okuyucunun önüne geçmez. Ancak yazarlar birbirlerinin önüne geçiyor (hatta sıralı versiyonlama temelinde izole bir seviyede çalışsalar bile). İki yazma işlemi aynı veriyi aynı anda değiştiremez.
Snapshot Isolation özelliği, SQL Server 2008'deki kilitleme çerçevesini genişleterek uygulamaların veri değişiklikleri olmadan önce değerleri görüntülemesini sağlar. Bu, uygulamanın kilitlenmesini engellerken yine de gerçekten gönderilen veri sağlanır. SQL Server 2008'in Read Committed Snapshot'ı, veri tabanı yöneticisinin etkinleştirilmesini gerektirir ve bu da verilerin yalnızca okunan işlemlerle okunmasına olanak tanır. Bu yüzden SI'nin yalnızca okunan işlemlerin eşzamanlılık kontrolü çok iyi, ancak güncelleme işlemleri için bunun geçerli olup olmadığı belirsiz. Uzun vadeli güncelleme işlemlerinin kısa vadeli yüksek seviyeli işlemlerle rekabet etmesi daha olumsuz bir durumdur. Veritabanları arasında bir işlem, tüm veritabanları yerine Snapshot Isolation (SI) standardını kullanmaya çalışırsa, işlem başarısız olur. Bu kesinlikle ölçeklenebilirlik için bazı engeller yaratır. Görünüşe göre Microsoft, SQL 92 spesifikasyonundan daha güçlü kendi SI'sına ulaşmak için hâlâ uzun bir yol kat etmeli.
Herhangi bir değişiklikten önce, önceki sürümün bir kopyasını alın, sonraki tüm okuma işlemleri kopyalanan versiyonu okuyacak ve bu değişiklik yeni bir sürüm oluşturacaktır. Bu şekilde,Okuma ve yazma işlemleri birbirini engellemez. Bu satır sürüm mekanizmasının avantajı, programın eşzamanlılığının nispeten yüksek olmasıdır, ancak dezavantajı ise kullanıcı kirli bir veri okumasa da, bu veri değeri değiştirilmekte ve süresi döndürmek üzere olabilir. Bu süresi dolan değere göre veriyi değiştirirseniz, mantıksal bir hata oluşur。
SQL komutları:
Referans bağlantıları:
Bağlantı girişi görünür.
Bağlantı girişi görünür.
Bağlantı girişi görünür.
Bağlantı girişi görünür.
Bağlantı girişi görünür.
Bağlantı girişi görünür.
|