DBCC CHECKDB dosyasını birden çok güne bölme


10

Paul Randal'ın temelde aşağıdakilerden oluşan çok büyük veritabanları için DBCC CHECKDB'yi birkaç gün boyunca elle yayma yöntemini uygulamak için çalışıyorum :

  • Veritabanındaki tabloların kabaca 7 kovaya bölünmesi
  • Haftada iki kez DBCC CHECKALLOC çalıştırma
  • Haftada bir DBCC CHECKCATALOG çalıştırma
  • Haftanın her günü bir kovada DBCC CHECKTABLE çalıştırma

Bu tekniği kullanan var mı? Orada herhangi bir komut dosyası var mı?

Bu aslında CHECKDB yaptığı her şeyi kapsayabilir endişe ediyorum; CHECKDB için Books Online belgelerinde , CHECKALLOC, CHECKCATALOG ve CHECKTABLE'a ek olarak:

  • Veritabanındaki dizinlenmiş her görünümün içeriğini doğrular.
  • FILESTREAM kullanarak dosya sisteminde varbinary (max) verileri depolarken tablo meta verileri ile dosya sistemi dizinleri ve dosyaları arasındaki bağlantı düzeyi tutarlılığını doğrular. (Yalnızca SQL 2008)
  • Veritabanındaki Service Broker verilerini doğrular.

Sorularım işte burada:

  1. Bu ek kontroller gerekli / önemli mi? (Dizine eklenen görünümler muhtemelen benim için biraz daha fazla, henüz Service Broker veya FILESTREAM kullandığımızı sanmıyorum.)

  2. Öyleyse, bu ek kontrolleri ayrı ayrı yapmanın yolları var mı?

  3. CHECKALLOC ve CHECKCATALOG, büyük dbs'de bile çok hızlı çalışıyor gibi görünüyor. Bunları her gün çalıştırmamak için bir sebep var mı?

(Not: Bu, yüzlerce sunucudaki binlerce mevcut veritabanı veya belirli bir boyuttaki en azından her veritabanı için standart bir rutin olacaktır. Bu, CHECKFILEGROUP'u kullanmak için tüm veritabanlarını yeniden yapılandırma gibi seçeneklerin bizim için gerçekten pratik olmadığı anlamına gelir.)


Paul, blogundaki yorumlarda bu sorunun bir versiyonunu yanıtladı. "Dizin oluşturulmuş görünüm doğrulaması konusunda endişelenme. 2008'den itibaren varsayılan olarak kapalıdır çünkü sorun bulamamıştır."
BradC

Ben de aynısını yapmaya çalışıyorum - muhtemelen bunu zaten uyguladığınız için bulduğunuz herhangi bir tavsiye / gotcha's?
scsimon

1
@scsimon İyi çalışmasını sağladım , tabloları bölmek için kullandığım özel strateji için bu ilgili soruya bakın . Nihayet tüm sunucudaki tüm (büyük) veritabanlarındaki tüm tabloların ana listesini günlük "kovalara" bölmek için yaptım , ki bu da bana her veritabanının listesini ayrı ayrı bölmekten çok daha da bölünmüştü. Daha küçük veritabanları Her gün tam bir DBCC yaptım ve bölünmenin bir parçası değildim.
BradC

Yanıtlar:


6

Bu ek kontroller gerekli / önemli mi? (Dizine eklenen görünümler muhtemelen benim için biraz daha fazla, henüz Service Broker veya FILESTREAM kullandığımızı sanmıyorum.)

DBCC CHECKTABLE WITH EXTENDED_LOGICAL_CHECKS Doğrudan dizine alınmış görünümlerde çalıştırabilirsiniz . İndekslenmiş görünümlerin kontrol edilmesi belirli durumlarda sorunlu olabilir , bu nedenle sonuçta ortaya çıkan yanlış pozitifleri araştırmaya hazır olun. (Paul Randal, atıfta bulunulan makaledeki yorumlarda da yanlış negatiflerin de mümkün olduğunu belirtiyor, ancak bununla ilgili doğrudan bir deneyimim yok.)

Öyleyse, bu ek kontrolleri ayrı ayrı yapmanın yolları var mı?

Hizmet Aracısını çalıştırmak veya FILESTREAMayrı ayrı kontrol etmek için destek yoktur, hayır.

CHECKALLOCve CHECKCATALOGbüyük dbs üzerinde bile çok hızlı çalışıyor gibi görünüyor. Bunları her gün çalıştırmamak için bir sebep var mı?

Bildiğim kadarıyla ... değil.


Ayrıca koşmayı da düşünebilirsiniz DBCC CHECKCONSTRAINTS. Bu kontrol edilir değil dahil içinde DBCC CHECKDB, belirttiğiniz herhangi seçeneklerden. Ayrıca , koşulların izin verdiği ölçüde ve zaman zaman koşmayı da düşünmek isteyebilirsiniz CHECKDB.


6

DBCC CHECKDB hayati önem taşır SQL Server veritabanlarının bozulma olmadığından% 100 emin olması için . Bununla birlikte, büyük boyutta büyüyen veritabanları nedeniyle, 24x7 kadar olduğunu iddia ettiğinizde bir bakım penceresi bulmak çok zordur. Yıllar boyunca, SQL Server ekibi, özellikle donanımın neden olduğu Fiziksel bozulma ile ilgili en yaygın yolsuzluk biçimlerini tespit edecek çeşitli mekanizmalar uygulamıştır.

SQL Server 2005 ve üzeri, veritabanı sayfalarındaki fiziksel bozulmayı proaktif olarak tespit etmenize ve böylece G / Ç sistemine yazılırken her sayfaya bir sağlama toplamı eklemenize ve sağlama toplamını diskten okunduğu gibi doğrulamanıza yardımcı olabilecek PAGE_VERIFY = CHECKSUM'a sahiptir.

Ayrıca, CHECKSUM ile yedekleme (tam veya diferansiyel) donanımın neden olduğu G / Ç bozulmalarını algılamayı garanti eder.

Bu nedenle, bozulmanın donanım tarafından, SQL Server bunu tespit etmek ve raporlamak için iyi bir iş çıkarır. (Ayrıca, yolsuzlukla ilgili önemli Uyarıları da ayarladığınızdan emin olun ).

Bununla birlikte, mantıksal bozulma , scribbler kaynaklı hatalar - bellek içi sayfalar, SQL Server işlemi içinde çalışan üçüncü taraf koduyla veya Windows çekirdek modunda ve / veya SQL Server'da yürütülmesi gereken ayrıcalıklara sahip sürücüler veya diğer yazılımlarla bozulduğunda Hatalar , vb. Yukarıdaki yöntemler kullanılarak tespit edilemez ve dolayısıyla CHECKDB resmedilir .

DBCC CHECKDB, başka bir yolla algılanamayan olası bozulmalar için sayfa başlıklarını kontrol etmeyi içeren daha kapsamlı bir kontrol gerçekleştirir.

Orada herhangi bir komut dosyası var mı?

Tekerleği yeniden icat etmek yerine, Ola'nın SQL Server Bütünlük Kontrolü çözümüne göz atmanızı şiddetle tavsiye ederim

DBCC CHECKDB'yi verimli bir şekilde çalıştırmak:

CHECKDB'yi çalıştırmak için büyük veritabanlarına veya çok sayıda veritabanına sahip bakım penceresinde sıkı olduğunuzda yaratıcı olmanız yeterlidir.

SQLSkills eğitimine katıldıktan sonra, çevremde uyguladığım şey:

  • hangi tabloların kontrol edilmesi gerektiğine öncelik verin.
  • tabloları farklı önceliklere sahip gruplara ayırın ve ardından DBCC CHECKTABLEçalışan DBCC CHECKALLOCveDBCC CHECKCATALOG
  • Tablo adlarını önceliklerle birlikte saklayacak bir çalışan tablosu oluşturun. Tüm yüksek öncelikli tabloların (büyük ölçüde büyük olan) bir grupta olmadığından emin olun, aksi takdirde CHECKDB'niz hiç tamamlanmaz.
  • Alt tablonuzda, CHECKDB'nizin bakım penceresini geçtikten sonra öldürüleceği zaman düzenlenecek bir zaman aşımı sütunu bile olabilir
  • O dönemde masaya başına ne kadar sürdüğünü ekleyin DBCC CHECKTABLE, DBCC CHECKALLOCve DBCC CHECKCATALOG. Böylece, çeklerinizin genellikle ne kadar sürdüğünü anlayabilirsiniz .
  • NOINDEXKullanıcı tablolarındaki Kümelenmemiş Dizinleri denetlemediğinden, işlemi hızlandıracağı için seçenekle de çalışabilirsiniz . Hiçbir veri kaybolmadığından ve gerekirse Dizini bırakıp yeniden oluşturabildiğiniz için Veri bozulması kadar kritik olmadığı için bunun bir avantajı vardır.

Açıkçası, Enterprise sürümü DBCC deyimlerinin Paralel yürütülmesinden yararlanabilir, ancak tüm CPU'nuzu alabileceği için MAXDOP ayarına dikkat edin. Bu, Kaynak Yöneticisi tarafından sınırlandırılabilir.

Not: SPARSE sütununuz varsa, CHECKDB'niz burada açıklandığı gibi yavaş yavaş ölecektir .

Son olarak, mevcut tüm araç setini + veritabanı sunucusu donanım sisteminize olan inancınızı ve en önemlisi verilerinizin değerini kullanarak veritabanı bozulmasını nasıl önleyeceğinizdir.

Bazı mükemmel referanslar:

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.