SQL Server Transaction Log Çalışma Şekli ve Temel Kavramlar

Transaction Logları (TL) ve İşlevleri

SQL Server aniden kapanırsa kullanılabilecek tek şey diske yazılmış olan Transaction Log dosyalarıdır.

Transaction Log dosyaları ya SQL Server otomatik kurtarma (recovery) tarafından veya bir yedek indirme (backup restoration) işlemi tarafından kullanılmak için tutulur.

SQL Server’da yer alan veritabanımızı herhangi bir zamana döndürmemiz gerekirse, Transaction Log dosyasına gereksinim duyarız

SQL Server Transaction Log Çalışma Şekli ve Temel Kavramlar

Commited Transaction :Bir transaction’u oluşturan tüm elementlerin başarılı bir şekilde tamamlandığını belirtir.

Örneğin; Bir transaction içinde 2 Update, 1 Insert işlemi yaptığımızı düşünelim. Hem update işlemlerinin hem delete işleminin başarılı olması o işlemin bir commited transaction olduğunu belirtir.

 → Eğer 3 işlemden herhangi biri yapılmazsa o transaction commited olarak işaretlenmez.

Checkpoint

SQL Server’da veriler direkt olarak diskten okunmaz. Veriler önce diskten buffer cache’e(memory’de sql server’ın data ve index page’leri için kullandığı alan) aktarılır.

Buffer Cache’de bulunan bir verinin disk’e yazılma işlemi ise şu şekilde gerçekleşir:

Buffer cache’de değişikliğe uğramış ve henüz diske yazılmamış page’ler dirty page olarak adlandırılır.

Buffer cache’deki bir page değişikliğe uğradığında hemen diske yazılmaz. Öncelikle log cache’de(memory’de log kayıtlarının tutulduğu alan) bu değişiklikle ilgili bir kayıt oluşturulur.

Log cache’deki ilgili kayıt fiziksel olarak diske yazılmadan(ldf uzantılı transaction log dosyasına.. Bu işlem log flush olarak bilinir) buffer cache’de değişikliğe uğramış kayıt fiziksel olarak diske(mdf ya da ndf uzantılı data dosyasına) yazılmaz. Bu olay karşımıza write ahead logging olarak çıkar. Eğer log dosyasına fiziksel olarak yazılmadan data dosyasına yazılma işlemi olsaydı her hangi bir hata sonucu server kapandığı takdirde rollback işlemi gerçekleşemezdi. SQL Server WAL(Write Ahead Log) mekanizması ile bu şekilde veri bütünlüğünü garanti altına alır.

Verilerin buffer cache’den diske yazılması page flushing olarak bilinir. Bu işlemi Lazy Writer yapar. Peki bu Lazy Writer’da nerden çıktı. SQL Server düzenli olarak kaynakları monitor eder. Ve memory üzerinde bir çekişme olduğunda Lazy Writer’ı tetikler. Ve bu şekilde buffer cache’deki dirty page’lerin diske yazılmasıyla buffer cache’de diğer session’ların kullanması için yeterli yer açılır.

SQL Server arka planda periyodik olarak checkpoint işlemini çalıştırır. Checkpoint’in çalışmasıyla yukarıda anlattığımız, log cache’deki kaydın ve dirty page’lerin diske yazılması işlemi gerçekleşir.(diskten okunduğundan beri ya da son checkpoint çalıştığından beri değişmiş olan kayıtların yazılması) Checkpoint manual olarak da CHEKCPOINT komutuyla da çalıştırılabilir.

Buffer Cache :

  • SQL Server’ın memory’sinin bir parçasıdır.
  • Buffer Cache’de SQL Server’ın verileri okuduğu page’ler bulunur.

SQL Server aracılığı ile bir verinin disklere yazılması sırasında gerçekleşen adımlar:

  1. Kullanıcı veya uygulamadan insert, update, delete komutlarından biri gönderilir.

2. SQL Server tarafından alınan veri Log cach’e (bellek bölgesi)’ne yazılır

3. Log Cache de tutulan veriye göre Buffer cache ve ilgili veritabanının fiziksel transaction log dosyası güncellenir.

4. Buffer cache’de tutulan veriler veritabanı dosyalarında (Data File) güncellenerek Buffer Cache temizlenir

Bir cevap yazın

Kişisel Web sayfama hoş geldiniz..