26 Ekim 2015 Pazartesi

Transaction Log Dosyaları Nedir? Ne İşe Yarar?



   Transaction log file'lar SQL Server içerisinde yapılan her türlü işlemin tutulduğu yerdir.  SQL Server içerisindeki en önemli parçalardan biri denilebilir. Çünkü herhangi bir disaster recovery durumunda verilerin kurtarılmasını sağlar. Tatbikî transction log file'da herhangi bir bozulma yoksa. Her bir database modifikasyonunda log kayıtları transaction log'lar yazılmaktadır. Burada bilinmesi gereken bir diğer husus değişlikler log'lanırken sıralı olarak kayıt edilirler.
   Transaction log'lar BULK IMPORT ve SELECT INTO durumları haricinde SQL Server'daki her bir transaction’ı saklarlar. Yapı içerisinde Virtual Log Files adı verilen (VLF) küçük parçalara ayrılmışlardır. Bir VLF dolduğu zaman bir sonraki erişilebilir olan VLF yazılmaya devam eder. Aslında buradaki yapıyı bir döngüye benzetebiliriz. Eğer bütün işlemler tamamlanır ve commit edilirse inactive duruma düşen VLF'ler'in içi boşaltılır ve yeniden yeni oluşan log kayıtları tutulması için en başa dönülür. Bu boşaltma işlemi gerçekleşebilmesi için VLF'lerin inactive durumda olması gerekir aksi takdirde log kayıtları gerekli olduğu için silinemez durumda olacaktır.  Inactive durumda olanlar bu sayede tekrardan kullanılabilir ve overwrite işlemi gerçekleşir. Transaction log'lar içerisinde bulunan bir kayıt eğer commit'lendiyse, page'lerde yapılan değişikler checkpoint vasıtasıyla disk'e yazıldıysa full, differential ya da log backup alındıysa artık daha fazla o kayda transaction log' da ihtiyaç yoktur.
   Logical log transaction log'ların aktif parçalarıdır. Log Sequence Number(LSN) transaction log'lar içerisinde her bir transaction için tanımlanırlar. Online transaciton log’lar içerisinde MinLSN en eski aktif transaction'nın başlangıç noktalarıdır.
   Sql server içerisinde birden fazla transaction log tanımlayabilirsiniz. Fakat bu spesifik durumlar dışında önerilen bir şey değildir. Aynı zamanda yazma işlemini arttırdığı için SQL Server performansını düşürübeilir.

Transaction Log’lar Neden Büyür?
                Her bir transaction online transaction log'lara kayıt edildiğinden daha önce bahsetmiştik. Bundan dolayı SQL Server çalışırken transaction log'lar boyut olarak büyürler. Bu nedenle transaction log'ların SQL Server'ın belirlemiş olduğunuz stratejisine uygun olarak bakımlarının yapılması oldukça önemlidir.
   SQL Server'ın transaction log'ların saklanma biçimine göre bize sunmuş olduğu üç farklı recovery model bulunmaktadır.
                1) Simple Recovery Model:  Bu modelde transaction log backup alınması SQL Server tarafından desteklenmemektedir. Log'ların silinme işlemi otomatik olarak yapılmakta ve disk içerisinde ki alan tekrardan kullanılabilir olmasını SQL Server bize kendisi sağlamaktadır. Bu modelde data kaybı riski bulunmaktadır. 
                2)Bulk- Logged Recovery Model:  Bu model de transaction log back up SQL Server tarafından desteklenmektedir. Burada simple recovery model de olduğu gibi otomatik olarak silme işlemi gerçekleşmez. Overwrite olması için transaction log backup'ların düzenli olarak kullanılmayan alanlar inactive olarak işaretlenmelidir. Bulk-Logged recovery model'de bulk operasyonlarını minimum düzeyde loglayarak transaction log’ların alan kullanımı azaltır.
                3)Full Recovery Model:  Transaction log backup bu modelde desteklenmektedir. Normal şartlar altında data kaybı bu modelde mümkün değildir.  Full recovery modelde de otomatik olarak transaction log'lar silinmezler.  Bulk logged recovery modelde de olduğu gibi bu modelde de düzenli olarak kullanılmayan alanlar inactive olarak işaretlenmelidir ki overwrite işlemi gerçekleşebilsin. Bütün transactionlar log'landığı için bu modelde trasaction log'lar oldukça hızlı bir şekilde büyüme eğilimindedirler.
SQL Server yönetiminde Transaction Log’ların bakımının yapılması en önemli görevlerden birisidir denilebilir.  Genelde günlük olarak transaction log'lar izlenmeli hatta çok fazla network trafiği olan sistemlerde daha sık olarak monitoring işleminin yapılması önerilir. Transaction log space'i (kullanılabilir alanı) aşağıdaki kodla izleyebiliriz.

DBCC SQLPERF(LOGSPACE);
GO

   Transaciton log'lar oluşturulmuş olan stratejiye göre düzenli olarak back up'ları alınması auto growth özelliğine göre tercih edilmesi daha sağlıklı olacaktır. Çünkü Transcation log back up aldıktan sonra SQL Server Transaction log dosyasını back up alındığı için truncate edecektir. Back up alındıktan sonrada o alan tekrardan kullanılabilir durumda olacaktır. 
   Transaction log backup'lar disaster recovery durumlarında ciddi önem arz etmektedir. Çünkü bu şekilde ciddi data kayıpları yaşamadan verilrimizi kurtarabiliriz.Örneğin 15 dakikalık aralıklarla back up alınabilir. Bu süreye sisteminize göre siz karar vermeniz daha doğru olacaktır. Bu sayade VLF'ler inaktif olarak işaretlenir ve overwrite ile tekrardan kullanılır.




2 yorum :