Aufteilung von DBCC CHECKDB auf mehrere Tage


10

Ich arbeite an der Implementierung von Paul Randals Methode zur manuellen Verteilung von DBCC CHECKDB über mehrere Tage für sehr große Datenbanken, die im Wesentlichen aus Folgendem besteht:

  • Teilen Sie die Tabellen in der Datenbank ungefähr gleichmäßig auf 7 Buckets auf
  • Führen Sie zweimal pro Woche einen DBCC CHECKALLOC aus
  • Führen Sie einmal pro Woche einen DBCC CHECKCATALOG aus
  • Ausführen eines DBCC CHECKTABLE an einem Eimer an jedem Wochentag

Hat jemand diese Technik angewendet? Gibt es da draußen vorhandene Skripte?

Ich mache mir Sorgen, dass dies möglicherweise nicht alles abdeckt, was CHECKDB tut. In der Books Online-Dokumentation für CHECKDB heißt es, dass neben CHECKALLOC, CHECKCATALOG und CHECKTABLE auch:

  • Überprüft den Inhalt jeder indizierten Ansicht in der Datenbank.
  • Überprüft die Konsistenz auf Verknüpfungsebene zwischen Tabellenmetadaten und Dateisystemverzeichnissen und -dateien, wenn varbinary (max) -Daten im Dateisystem mithilfe von FILESTREAM gespeichert werden. (Nur SQL 2008)
  • Überprüft die Service Broker-Daten in der Datenbank.

Also hier sind meine Fragen:

  1. Sind diese zusätzlichen Prüfungen notwendig / wichtig? (Indizierte Ansichten sind für mich wahrscheinlich etwas besorgniserregender. Ich glaube, wir verwenden noch keinen Service Broker oder FILESTREAM.)

  2. Wenn ja, gibt es Möglichkeiten, diese zusätzlichen Prüfungen separat durchzuführen?

  3. CHECKALLOC und CHECKCATALOG scheinen selbst bei großen Datenbanken sehr schnell zu laufen. Gibt es einen Grund, diese nicht jeden Tag auszuführen?

(Hinweis: Dies ist eine Standardroutine für Tausende vorhandener Datenbanken auf Hunderten von Servern oder zumindest für jede Datenbank über eine bestimmte Größe. Dies bedeutet, dass Optionen wie die Umstrukturierung aller Datenbanken zur Verwendung von CHECKFILEGROUP für uns nicht wirklich praktisch sind.)


Paul antwortete auf eine Version dieser Frage in den Kommentaren in seinem Blog. Er sagte: "Machen Sie sich keine Sorgen um die Validierung der indizierten Ansicht. Ab 2008 ist sie standardmäßig deaktiviert, da keine Probleme gefunden wurden."
BradC

Ich arbeite daran, dasselbe zu tun - irgendwelche Ratschläge / Gotchas, die Sie gefunden haben, da Sie dies wahrscheinlich bereits implementiert haben?
Scsimon

1
@scsimon Ich habe es gut gemacht, siehe diese verwandte Frage für die spezifische Strategie, die ich verwendet habe , um die Tabellen zu teilen. Ich glaube, ich habe letztendlich eine Hauptliste aller Tabellen in allen (großen) Datenbanken auf dem gesamten Server erstellt , um sie in die täglichen "Buckets" aufzuteilen, was mir eine viel gleichmäßigere Aufteilung ermöglichte, als die Liste jeder Datenbank einzeln aufzuteilen. Kleinere Datenbanken Ich habe jeden Tag eine vollständige DBCC durchgeführt und war nicht Teil der Aufteilung.
BradC

Antworten:


6

Sind diese zusätzlichen Prüfungen notwendig / wichtig? (Indizierte Ansichten sind für mich wahrscheinlich etwas besorgniserregender. Ich glaube, wir verwenden noch keinen Service Broker oder FILESTREAM.)

Sie können DBCC CHECKTABLE WITH EXTENDED_LOGICAL_CHECKS direkt in den indizierten Ansichten ausgeführt werden . Das Überprüfen indizierter Ansichten kann unter bestimmten Umständen problematisch sein. Seien Sie daher bereit, die daraus resultierenden Fehlalarme zu untersuchen. (Paul Randal erwähnt in den Kommentaren zu dem Artikel, auf den verwiesen wird, auch, dass auch falsche Negative möglich sind, aber ich habe keine direkte Erfahrung damit.)

Wenn ja, gibt es Möglichkeiten, diese zusätzlichen Prüfungen separat durchzuführen?

Es gibt keine Unterstützung für die Ausführung des Service Broker oder für FILESTREAMseparate Überprüfungen.

CHECKALLOCund CHECKCATALOGscheinen sehr schnell zu laufen, auch auf großen dbs. Gibt es einen Grund, diese nicht jeden Tag auszuführen?

Nicht dass ich wüsste.


Sie könnten auch in Betracht ziehen, zu laufen DBCC CHECKCONSTRAINTS. Diese Prüfung ist nicht inbegriffen in DBCC CHECKDB, unabhängig von irgendwelchen Optionen können Sie angeben. Sie können auch daran denken, gelegentlich zu rennen CHECKDB, wenn die Umstände dies zulassen.


6

DBCC CHECKDB ist von entscheidender Bedeutung für SQL Server - Datenbanken zu 100% sicher sein , dass es keine Korruption. Aufgrund der massiven Größe von Datenbanken ist es jedoch sehr schwierig, ein Wartungsfenster zu finden, wenn Sie behaupten, rund um die Uhr verfügbar zu sein. Im Laufe der Jahre hat das SQL Server-Team verschiedene Mechanismen implementiert, mit denen die häufigsten Formen von Beschädigungen erkannt werden, insbesondere im Zusammenhang mit physischer Beschädigung durch Hardware.

SQL Server 2005 und höher verfügt über PAGE_VERIFY = CHECKSUM, mit dessen Hilfe Sie proaktiv physische Beschädigungen auf Datenbankseiten erkennen können, indem Sie jeder Seite beim Schreiben in das E / A-System eine Prüfsumme hinzufügen und die Prüfsumme beim Lesen von der Festplatte validieren.

Durch die Sicherung (vollständig oder differenziell) mit CHECKSUM wird außerdem garantiert, dass durch Hardware verursachte E / A-Beschädigungen erkannt werden.

Auf der Hardwareseite der Beschädigung kann SQL Server diese daher gut erkennen und melden. (Stellen Sie sicher, dass Sie auch wichtige Warnungen im Zusammenhang mit Korruption festlegen .)

Trotzdem immer noch logische Beschädigung , durch Scribbler verursachte Fehler - bei denen In-Memory-Seiten entweder durch Code von Drittanbietern beschädigt werden, der im SQL Server-Prozess ausgeführt wird, oder durch Treiber oder andere Software mit ausreichenden Berechtigungen, die im Windows-Kernelmodus und / oder in SQL Server ausgeführt werden Bugs , etc. sind nicht nachweisbar über Methoden und damit CHECKDB kommt ins Bild.

DBCC CHECKDB führt eine gründlichere Überprüfung durch, einschließlich der Überprüfung der Seitenkopfzeilen auf mögliche Beschädigungen, die auf keine andere Weise erkennbar sind.

Gibt es da draußen vorhandene Skripte?

Anstatt das Rad neu zu erfinden, würde ich Ihnen dringend empfehlen, sich die SQL Server Integrity Check-Lösung von Ola anzusehen

Effizientes Ausführen von DBCC CHECKDB:

Sie müssen nur kreativ sein, wenn Sie ein enges Wartungsfenster mit riesigen Datenbanken oder einer hohen Anzahl von Datenbanken haben, auf denen CHECKDB ausgeführt werden soll.

Nach dem Besuch der SQLSkills-Schulung habe ich Folgendes in meiner Umgebung implementiert:

  • Priorisieren Sie, welche Tabellen zu überprüfen sind.
  • Trennen Sie die Tabellen in Gruppen mit unterschiedlichen Prioritäten und führen Sie sie DBCC CHECKTABLEzusammen mit DBCC CHECKALLOCund ausDBCC CHECKCATALOG
  • Erstellen Sie eine Arbeitertabelle, in der die Tabellennamen mit Prioritäten gespeichert werden. Stellen Sie einfach sicher, dass alle Tabellen mit hoher Priorität (die sehr groß sind) nicht zu einer Gruppe gehören, da Ihre CHECKDB sonst überhaupt nicht vollständig wird.
  • Sie können sogar eine Timeout-Spalte in Ihrer Worker-Tabelle haben, die koordiniert, wann Ihre CHECKDB beendet wird, sobald sie das Wartungsfenster passiert hat
  • Fügen Sie hinzu, wie lange die Ausführung pro Tabelle gedauert hat DBCC CHECKTABLE, DBCC CHECKALLOCund DBCC CHECKCATALOG. Damit Sie ein Gefühl dafür bekommen, wie lange es normalerweise dauert, bis Ihre Schecks ausgeführt werden.
  • Sie können sogar mit NOINDEXOption ausführen, da dies den Vorgang beschleunigt, da die nicht gruppierten Indizes in Benutzertabellen nicht überprüft werden. Dies hat einige Vorteile, da es als Datenbeschädigung nicht so kritisch ist, da keine Daten verloren gehen und Sie den Index bei Bedarf löschen und neu erstellen können.

Natürlich kann die Enterprise Edition die parallele Ausführung von DBCC-Anweisungen nutzen. Achten Sie jedoch auf die MAXDOP-Einstellung, da dies möglicherweise Ihre gesamte CPU beansprucht. Dies kann vom Resource Governor stark eingeschränkt werden.

Hinweis: Wenn Sie die Spalte SPARSE haben, ist Ihre CHECKDB wie hier beschrieben absolut langsam .

Schließlich erfahren Sie, wie Sie eine Beschädigung der Datenbank verhindern können, indem Sie alle verfügbaren Tools + Ihr Vertrauen in Ihr Datenbankserver-Hardwaresystem und vor allem den Wert Ihrer Daten nutzen.

Einige ausgezeichnete Referenzen:

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.