Checksum ve TornPage Kavramları
Checksum ve TornPage Kavramları SQL Server Veritabanının Özelliklerinden Page Verify’ın seçeneklerindendir. Her ikiside veritabanında disk hatalarından dolayı oluşan I/O problemlerini keşfetmek ve raporlamak için kullanılan yöntemlerdir.
TornPage SQL Server 2000 zamanında Microsoft’un default olarak set ettiği page verify seçeneğiydi. Checksum SQL Server 2005 ile beraber daha gelişmiş bir page verify seçeneği olarak hayatımıza girdi.
Makalenin devamını okumadan önce “SQL Server Storage Kavramları(Page,Extents,GAM,SGAM,PFS,IAM,BCM,DCM)” isimli makalemi okumanızı tavsiye ederim.
Peki Tornpage ve Checksum disk hatalarından dolayı oluşan I/O problemlerini nasıl tespit ediyor?
TornPage: Bir page’deki her sektör(diskten okunabilecek ve yazılabilecek en küçük birimdir.512 byte’dan oluşur.)’e ait ilk iki bit’i page header’da tutar. Page hakkındaki detaylı bilgiyi “SQL Server Page Yapısı ve DBCC Page” isimli makalede bulabilirsiniz. Veri diskten tekrar okunduğunda page header’da tutulan bu iki bit ile karşılaştırılır ve aynı olup olmadığı belirlenir. Aynı değilse corruption tespiti yapılıp gerekli uyarı verilir. Sector’un geri kalanında bir problem oluşursa tespit edemez.
Cheksum: Page’deki her sektör için 2 bit yerine bütün page için bir cheksum değeri üretilir ve veri diskten tekrar okunmak istendiğinde tekrar bu checksum değeri ile karşılaştırılır. Page’deki hangi bir bit bozulduğunda bunu tespit eder ve gerekli uyarıyı verir. Yani Tornpage’e göre daha güvenlidir. Performans olarak tornpage’e göre daha yavaş olsa da bu kabul edilebilir bir yavaşlıktır.
Aşağıdaki script ile instance üzerindeki veritabanlarının page verify seçeneklerini bulabilirsiniz.
SELECT name, page_verify_option_desc FROM sys.databases;
Page Verify seçeneği CHECKSUM olmayan veritabanlarını aşağıdaki script’i kullanarak CHECKSUM olarak değiştirebilirsiniz.
USE [master] GO ALTER DATABASE [AdventureWorks2014Yeni] SET PAGE_VERIFY CHECKSUM WITH NO_WAIT; GO
Ya da veritabanı üzerine sağ tıklayarak properties seçeneğinden Options tab’ına gelerek Page Verify seçeneğini değiştirebilirsiniz.
Eğer page verify seçeneğini checksum olarak değiştirmeniz gereken çok sayıda veritabanınız varsa aşağıdaki script yardımıyla hepsini birden değiştiren script’i alıp tek seferde hepsini değiştirebilirsiniz. Sorgu sonucununda dönen kayıtların hepsini kopyalayıp yeni bir query olarak çalıştırmalısınız.
SELECT N'ALTER DATABASE [' + name + N'] SET PAGE_VERIFY CHECKSUM WITH NO_WAIT' FROM sys.databases WHERE page_verify_option_desc <> 'CHECKSUM'