CHECKDB veritabanı üzerinde bütünlük, sağlamlık kontrolü yapabilmeyi sağlayan DBCC komutudur.
Bütünlük kontrolü sırasında SQL Server bütün page’leri tek tek okur ve herhangi bir sorun olup olmadığını kontrol eder bu işlemi (eğer aksi belirtilmediyse) Internal Snapshot üzerinden yapar.
Bu okuma işlemi sırasında çalışma mantığından vazgeçmeyerek page’leri önce diskten memory’e alıp, memory üzerinden okumaktadır. Bu işlem sorgulara ait page’lerin memory’den atılmasına, sorguların bir süre yavaşlamasına ve sorgularda PAGEIOLATCH bekleme türünü görmenize sebep olabilir.
Syntax
DBCC CHECKDB [ ( database_name | database_id | 0 [ , NOINDEX | , { REPAIR_ALLOW_DATA_LOSS | REPAIR_FAST | REPAIR_REBUILD } ] ) ] [ WITH { [ ALL_ERRORMSGS ] [ , EXTENDED_LOGICAL_CHECKS ] [ , NO_INFOMSGS ] [ , TABLOCK ] [ , ESTIMATEONLY ] [ , { PHYSICAL_ONLY | DATA_PURITY } ] [ , MAXDOP = number_of_processors ] } ] ]
*Orjinal Microsoft websitesinden alıntıdır.
- NOINDEX : User tablolarındaki NonClustered Index’leri tarama işlemini atlamak için kullanılır.
- REPAIR_ALLOW_DATA_LOSS : Veritabanını onarmaya çalışır, bu seçenek data kaybına sebep olabilir.
- REPAIR_FAST : Adıyla alakasız bir biçimde veritabanını onarmaya çalışmaz, eski sürümler için söz dizimini korur.
- REPAIR_REBUILD : Data kaybı olmadan veritabanını onarmaya çalışır, index rebuild veya non-clustered index’lere eksik dataları düzeltir.
- WITH ALL_ERRORMSGS : Taranan objelere ait error mesajlarını result kısmında gözükmesini sağlar ancak bu option zaten default olarak açık olduğundan, kullanmanın bir anlamı yoktur.
Microsoft says : “Specifying or omitting this option has no effect. “ - WITH EXTENDED_LOGICAL_CHECKS : Eğer varsa Indexed view, XML index’ler ve spatial index’ler üzerinde tarama gerçekleştirir.
*Compatibility Level > 100 gerektirir. - WITH NO_INFOMSGS : Info mesajlarının gösterilmemesi için kullanılır.
- WITH TABLOCK : CHECKDB işleminin snapshot kullanmak yerine veritabanı üzerinde anlık okuma yapar. Bu işlem veritabanı üzerine exclusive (X) lock koyar. CHECKDB işleminin hızlanmasını sağlamasının yanında veritabanı erişiminde lock’lanmalar olacaktır.
- WITH PHYSICAL_ONLY : Fiziksel kısımların kontrolü ve bütünlük kontrol işleminin daha hızlı olması için kullanılır.
*FILESTREAM data’ları kapsamamaktadır. - WITH DATA_PURITY : Kolon tiplerine göre dataların eşitliliğini kontrol eder.
- WITH MAXDOP : CHECKDB işleminin paralel yapılabilmesini sağlar.
*SQL Server 2014 SP2 ve üzeri gerektirir.
Demo
Herhangi bir parametre belirtilmeden çalıştırıldığında aşağıdaki şekilde detaylı çıktı alınır.
Eğer bu sonuç ile karşılaşıyorsanız şanslısınız.
*Ayrıca SQL Error Log üzerinden de görüntülenebilir.
CHECKDB işlemini hızlandırabilir miyim?
- MAXDOP kullanarak,
- CHECKDB yerine daha ufak parçalarla DBCC CHECKALLOC, DBCC CHECKTABLE ,DBCC CHECKCATALOG bütünlük kontrolü yaparak,
- WITH PHYSICAL_ONLY seçeneğini kullanarak,
- 2562 ve 2549 Trace Flag’lerini kullanarak.
Best Practice
Veritabanı bozulmalarını hızlıca fark edip, daha büyük sorunlara yol açmadan çözmek için belirli periyotlarla kontrol edilmelidir. Maintenance Plan’ına eklenmelidir.
*Microsoft canlı veya büyük veritabanları için PHYSICAL_ONLY kullanılmasını tavsiye eder.
Herhangi bir hata mesajıyla karşılaşırsanız telaş yapıp, veritabanına daha çok zarar vermeden önce (örneğin detach etmek vs.) bilir kişilerden destek almanızı tavsiye ederim.