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.
Teşekkürler,
YanıtlaSilTeşekkürler, kafamdaki soru işaretlerini giderdi.
YanıtlaSiltenk you,
YanıtlaSiliyi güzel
YanıtlaSiliyi güzel
YanıtlaSil