SQL – FRAGEN UND ANTWORTEN Prüfsumme Probleme, wählen das richtige Wiederherstellungsmodell und mehr

Paul S. Randal

QIch bin ein SharePoint-Administrator, und ich haben vor kurzem festgestellt, dass eine eigene Inhalten Datenbanken beschädigt, wurde wenn Meine monatliche wurden Fehler gefunden Konsistenzprüfungen. Wir es zu zurückverfolgt eines fehlerhaften RAID-Controllers, und nach einigen Untersuchungen durchführen, sind wir auf Prüfsummen auf die Datenbankseiten aktiviert. Ist meine Frage: Wie erkenne ich bei ein Prüfsumme Problem ohne warten, bis des monatlichen Wartungsplans?

ASind ein paar Dinge, die Sie durchführen können. Zunächst können Sie Ihre Sicherungen die Option WITH CHECKSUM hinzufügen. Für vollständigen und differenziellen Sicherungen wird diese Option den Sicherungsvorgang testen alle Seitenprüfsummen erkennt und mit einem Fehler fehl, wenn es findet eine Beschädigung verursachen. (Ich behandelt diese ausführlicher in Artikel des letzten Monats, "Grundlagen der SQL Server-Sicherungen".)

Berücksichtigen Sie Zweitens die Konsistenzprüfungen häufiger als monatlich ausgeführt. Es empfiehlt sich eine Form der Konsistenzprüfung mindestens wöchentlich ausgeführt, ob eine DBCC CHECKDB auf der Datenbank oder vielleicht eine wiederhergestellte Kopie der Datenbank ist. Natürlich soll von den Komfort Ebene mit e/A-Subsystem abhängen.

Drittens einige SQLServerAgent Alerts hinzufügen. Eine Warnung kann auf einer Vielzahl von Faktoren, wie z. B. eine bestimmte Fehlernummer, die ausgelöst wird, von SQL Server einen Fehler mit einem bestimmten Schweregrad ausgelöst wird oder ein Leistungsindikator einen Schwellenwert überschreiten auslösen festgelegt werden. Diese Funktion bietet einen sehr leistungsstarken Mechanismus zum Serverprobleme zu überwachen.

Wenn eine Warnung ausgelöst wird, eine Nachricht gesendet an eine vordefinierte "Operator" mit einer oder alle diese Optionen: eine Pagernachricht, E-mail oder NET SEND. können Sie beispielsweise folgende Zeile verwenden die gespeicherte Prozedur Sp_add_notification zum Definieren eines Operators.

Soweit e/a-Subsystem Problemen befassen, sind Sie interessiert sind Fehler 823, 824 und 825. Die ersten beiden werden ausgelöst, wenn ein e/A-Problem auftritt (insbesondere 824 ist, wenn eine Prüfsumme der Seite gefunden wird, die fehlerhaft sind und 825, ist wenn SQL Server, verfügt um einen Lesevorgang mehrmals versuchen, bevor er abgeschlossen ist). Dies sind alle Probleme, denen Sie so bald wie möglich wissen, um den Schaden an der Datenbank (und möglicherweise den Umfang der Ausfallzeit um wiederherzustellen) weiter einzuschränken möchten.

823 und 824 sind beide 24 Schweregrad Fehler 825 ist nur eine Schweregrad 10 "Information" Meldung (Informationen, finden Sie in meinem Blogbeitrag „ jedoch Ein wenig bekannte Zeichen bevorstehenden Doom: Fehler 825.") Um für diese Fehler hinzuweisen definieren Sie eine Benachrichtigung für alle 24 Schweregrad Fehler, und eine speziell für Fehler 825 sollten (in der Tat ist es empfehlenswert, eine Warnung für jede-Schweregrad von 19 bis 25 haben).

Um die tatsächlichen Warnungen zu definieren, können Sie T-SQL oder Management Studio verwenden. Unten ist ein Beispiel der T-SQL-Code zum Hinzufügen einer Benachrichtigung für den Fehler 825.

USE msdb;
GO 
EXEC msdb.dbo.sp_add_alert @name = N'825 - Read-Retry Required', 
    @message_id = 825,
    @severity = 0,
    @enabled = 1,
    @delay_between_responses = 0,
    @include_event_description_in = 1,
    @category_name = N'IO Subsystem Error';
GO

Weitere Informationen zur Definition und Warnungen, einschließlich eine schrittweise Anleitung zum Hinzufügen von Warnungen mithilfe von Management Studio in meinem Blog SQLServerAgent finden Kategorie "(Sie SQL 2005 SP2 Wartung Plan Fehler maskieren Beschädigung)."

QIch bin ein Entwickler DBA, wer verantwortlich für die Code und die Datenbank wird im ausgeführt ist. Ich habe mit einigen anderen Datenbankentwicklern, zum verwenden einen eindeutigen Wert zur Identifizierung von Tabellenzeilen arguing wurde. Ich eine GUID als Schlüssel des gruppierten Indexes verwenden möchten, jedoch werden die anderen arguing, dass es zu Leistungsproblemen mit Indizes führen kann. Ist dieser True, und wenn dies der Fall ist, können Sie erklären, weshalb?

A Es ist Ja, WAHR – GUIDs sind die führenden Ursachen Indexfragmentierung in SQL Server-Datenbanken.

Eine GUID ist eine Globally Unique Identifier. In SQL Server ist dies ein 16-Byte-Wert, in SQL Server generierten oder an anderer Stelle ist (z. B. über .NET in der Client oder Mid-tier). GUIDs haben im Allgemeinen einen zufälligen Wert, wenn mit der NEWSEQUENTIALID-Funktion in SQL Server 2005 eingeführt wurde generiert.

Diese Funktion erzeugt Bereiche von GUIDs, die Ihnen einige der Probleme vermieden werden hier beschrieben. Jedoch benötigt, erstellen eine serverseitige-GUID, die in vielen Anwendungsumgebungen funktionieren nicht, da der eindeutige Bezeichner generiert werden muss, bevor die Daten an der die Datenebene, nach unten gesendet werden.

Unabhängig davon, wo die nicht sequenzielle GUID generiert wird, dass er als der führende Schlüssel im Index, da der Schlüssel im Wesentlichen zufällig ist die Einfügemarke eines neuen Datensatzes im Index befindet auch zufällige – der Schlüssel Wert eines Datensatzes bestimmt die Platzierung im Index. Dies bedeutet auch, dass die 16-Byte-GUID in jeder Zeile jeder nicht gruppierte Index als Teil der Verknüpfung, das das Speichermodul aus Datensätzen nicht gruppierten Index zu gruppierten Index enthalten wird zu Spaltenwerte für die Auswahlliste der Abfrage zu erhalten, die in den nicht gruppierten Index, der verwendet wurde (häufig auch als eine Lesezeichensuche bezeichnet) sind Datensätze navigieren können.

Als weitere Datensätze in den Index eingefügt werden, füllen die Seiten, die Datensätze zu speichern. Wenn ein Datensatz auf einer Seite eingefügt wird, die bereits voll ist (Beachten Sie, dass der Schlüssel Wert bestimmt, wo der neue Datensatz geht), dann die Seite mit einige Datensätze in eine neu zugewiesene Seite verschieben Teilen muss. Einem Seite Split ist ein teurer Vorgang durchführen (eine neue Seite reserviert ist und in den Index verknüpft und Datensätze werden auf das neue Zeichenblatt verschoben) und veranlasst die Fragmentierung.

Seite Unterbrechungen werden logische Fragmentierung durch verursacht die physischen und logischen Reihenfolge der Seiten im Index können unterschiedlich sein in den Index (die Bereichs-Scan-Leistung beeinflusst) verursachen. Dadurch auch schlechte Seitendichte (wobei es nicht verwendeter Speicherplatz auf Seiten ist), die führt zu ungenutzten Speicherplatz für Seiten und schlechte Datenträger, e/A und Speicher-Auslastung.

Weitere Informationen zu Indexfragmentierung und zum Erkennen und entfernen finden Sie in meinem Artikel vom August 2008" Die besten Tipps für effektive Datenbankwartung." Kommissionierliste gute gruppierten Indexschlüssels würde den Rahmen dieses Artikels sprengen; werde, Meine Frau Kimberly L. lassen Tripp zu erklären. Finden Sie unter Ihre hervorragende Blogbeitrag zu diesem Thema die Weitere Informationen zu GUIDs und gruppierten Index Strukturen "(auch Zeichenfolgenvariable GUIDs als PRIMARY Schlüssel und/oder den Gruppierungsschlüssel.")

QUnsere Strategie für hohe Verfügbarkeit besteht darin, Protokollversand, um eine Reihe von sekundären Servern verwenden. Unser Managementteam ist mir einige nutzen redundante Server speichern auf Kapitalkosten pressuring. Meine Vorstellung ist die Verwendung die sekundären Server damit reporting Abfragen ausgeführt, die auch die Vorteile der Verschiebung der Bericht Arbeitsauslastung des primären Servers verfügen würde. Welche Probleme können in Dadurch werden ausgeführt?

A Diese Art von Szenario ist viel häufiger in der aktuellen wirtschaftlichen Klima gewinnt, in denen Unternehmen-Server um, sitzen angezeigt (Obwohl Sie eine redundante Kopie der Datenbank bereitgestellt sind) im Leerlauf werden gefällt.

Wie Sie wahrscheinlich bereits wissen, beim Einrichten des Protokollversands können Sie definieren wie Sicherungen des Transaktionsprotokolls auf dem sekundären Server wiederhergestellt werden – WITH NORECOVERY oder WITH STANDBY. Erstere zulassen keine Zugriff auf die Datenbank, während Letzteres nur-Lese-Zugriff auf die Datenbank ermöglicht. Diese verwendet einen speziellen Modus Wiederherstellung ausgeführt wird und der Datenbank transaktionell konsistent ist, wobei ein die Operationen werden in einer separaten Rückgängigdatei gespeichert, die weitere Transaktionsprotokollsicherungen wiederhergestellt werden können (erörtert diese ausführlicher im nächsten Monat in einem Artikel über die Verwendung von RESTORE).

Damit der sekundäre Server melden, können Sie ihm WITH STANDBY verwenden, sodass die Berichterstellung Abfragen eine Verbindung mit der Datenbank herstellen können. Einmal können Sie Benutzerverbindungen, gegen Probleme sofort ausführen.

Zunächst kann mithilfe der Option WITH STANDBY zu führen Transaktionsprotokollsicherungen seeming lange dauert, auf dem sekundären Server wiederherstellen wie der Inhalt der Datei rückgängig machen müssen wiedergegeben werden, bevor die nächste Transaktionsprotokollsicherung wiederhergestellt werden kann. Dies kann ein Problem sein, wenn die Rückgängigdatei eine große Anzahl von Vorgängen enthält.

Zweitens ist die Wiederherstellung einer Transaktionsprotokollsicherung ein Onlinevorgang nicht. Niemand können für die Dauer der Wiederherstellung der Datenbank verbunden werden. Dies bedeutet, dass alle Verbindungen mit dem sekundären Berichtsserver gelöscht und dann nach Abschluss der Wiederherstellung wiederhergestellt werden müssen. Hier haben Sie ein Dilemma: Wenn es Zeitpunkt der nächsten Sicherung des Transaktionsprotokolls wiederherzustellen ist, Sie Benutzerverbindungen beenden oder Ihre Abfragen beenden können? Das ist vollständig einrichten möchten.

Eine Frage, wenn Sie keine Verbindungen zu beachten: wie lange lassen Sie die Abfragen weiterhin vor zwangsweise beendet? Je länger Sie warten, je länger es ist seit die letzte Protokollsicherung wiederhergestellt wurde, und weitere Behind die primäre Datenbank sekundäre eine erhält. Dies konnte ein Problem sein, wenn Sie dann ein Failover auf den sekundären da konnte eine Warteschlange von Protokollsicherungen darauf warten, wiederhergestellt werden, um die Datenbank so weit Stand wie möglich zu versetzen, Datenverluste minimieren.

Finden Sie weitere Informationen zu diesen Optionen sowie auf Probleme wie Zeit seit der letzten Sicherung Protokoll-Wiederherstellung auf dem sekundären Server in der Onlinedokumentation, überwachen" Verwenden sekundärer Server für Abfrageverarbeitung."

QWie kann ich das richtige Wiederherstellungsmodell wählen? Was ich gelesen haben scheint es ich sollte werden mithilfe massenprotokollierte um meine Größe des Transaktionsprotokolls zu reduzieren, jedoch scheint Meine Protokollgröße weiterhin anwächst hält. Ist es möglich, einen Modus verwenden, der das Transaktionsprotokoll überhaupt verwenden und vollständig vermeiden Sie das gesamte Problem nicht?

A Ne Anforderungen, die ich mehrere Male gehört haben kann eine Datenbank nicht protokolliert, wenn überhaupt kein Transaktionsprotokoll-Datensätze generiert werden, insbesondere für Tempdb, die Personen anzeigen als Scratch Datenbank da es Startup des Servers neu erstellt wird.

Soweit ich weiß, geschieht dies nie für SQL Server. Sie erzielen optimale ist der massenprotokollierten-Modus, drastisch schneidet Sie die Menge der Transaktionsprotokolleinträge für bestimmte Vorgänge (z.B.) generiert index Neukompilierungen und Massenkopieren geladen. Alle Datenbanken, sogar Tempdb müssen können die Protokollierung, um Transaktionen einen Rollback zu ermöglichen einem gewissen Grad (d. h., um alle Vorgänge rückgängig zu machen, die Teil der Transaktion) im Falle von einem Benutzer das Abbrechen der Vorgang oder den Vorgang verursacht Fehler fehlschlagen.

Wichtiger für Datenbanken, abgesehen von Tempdb, Neuigkeiten ist, dass wenn ein Systemabsturz auftritt, die Datenbank ohne verlassen transaktionell inkonsistente Daten oder einem strukturell inkonsistente Wiederherstellung möglich sein muss (d. h. beschädigt) Datenbank. Angenommen, wenn kein Datensatz was in der Datenbank vor dem Absturz ändern worden war es wurden – wie würde SQL Server Wiederherstellung ausführen? Lesen Sie zur Funktionsweise von Protokollierung und Wiederherstellung in meinem Artikel vom Februar 2009 " Grundlegendes zur Protokollierung und Wiederherstellung in SQLServer."

Für ein Wiederherstellungsmodell wählen, wird eine überschreibende Frage Ihrer Wahl bestimmen: möchten Sie "Point-in-Time" oder "minutengenaue" Wiederherstellung im Falle eines einem Notfall möglich? Wenn dies der Fall ist, können Sie ihm das Modell der VOLLSTÄNDIGEN Wiederherstellung (und möglicherweise das BULK-_LOGGED-Modell) gelegentlich zu verwenden. Wenn Sie nicht auf diese Weise sind, verwenden Sie das Wiederherstellungsmodell SIMPLE.

Der Grund für Verwendung von SIMPLE anstelle von FULL, wenn Sie die Datenbank wiederherstellen (ohne Verlust von Arbeit seit der letzten Datenbanksicherung oder differenzielle Sicherung möglicherweise möchten) ist, dass mit dem SIMPLE-Wiederherstellungsmodell Sie keine auszuführende Transaktion Protokollsicherungen, um die Größe des Transaktionsprotokolls zu verwalten.

Jetzt kann es andere Gründe, warum Sie sich mit das VOLLSTÄNDIGEN Wiederherstellungsmodell – beispielsweise wenn Sie verwenden möchten (DBM unterstützt nur das VOLLSTÄNDIGE Wiederherstellungsmodell) Datenbankspiegelung oder Protokollversand (Log Protokollversand unterstützt die massenprotokollierten und VOLLSTÄNDIGE Wiederherstellung-Modelle). In beiden Fällen können Sie ihm sein, um sicherzustellen, dass Sie Transaktion Protokollsicherungen dauert sind so, dass das Protokoll zu groß werden nicht (auch wenn Sie nur diese verwerfen landen).

Erwähnt, dass Sie gelegentlich verwendet das Modell der massenprotokollierten Wiederherstellung nicht ständig in diesem Modus ausgeführt, sondern möglicherweise möchten. Dies ist da einige Einschränkungen gelten um aufzeichnen und Wiederherstellen von Transaktionsprotokollsicherungen, wenn ein Vorgangs in das Modell der massenprotokollierten Wiederherstellung seit der letzten Transaktionsprotokollsicherung: minimal protokolliert. Die Details sind in dieser Spalte erklären zu komplex, aber Sie können feststellen, mehr dazu und zum Auswählen eines Wiederherstellungsmodells im Allgemeinen in der Onlinedokumentation unter dem Thema " Wiederherstellung Model Overview."

Paul S. Randal ist Direktor von Leitende SQLskills.com, eines Directors Microsoft Regions- und einer SQL Server-MVP. Er wird im SQL Server-Speichermodul Team bei Microsoft von 1999 zu 2007 gearbeitet. Paul schrieb DBCC CHECKDB/Repair für SQL Server 2005 und SQL Server 2008-Entwicklung für das Kernspeichermodul zuständig war. Paul ist Experte für Notfallwiederherstellung, hohe Verfügbarkeit und Datenbankwartung und ein regelmäßiger Referent bei Konferenzen weltweit. Er Blogs an SQLskills.com/blogs/paul, und finden Sie ihn auf Twitter an Twitter.com/PaulRandal.