Wann wurde Torn Page Detection and Checksum in SQL Server eingeführt und wie verhält sich das Upgrade?

15

In modernen SQL Server gibt es zwei verschiedene Optionen für die Seitenüberprüfung. wobei torn Page Detection und Checksum . Keiner ist natürlich auch eine Option.

Ich glaube, dass Checksum in SQL Server 2005 eingeführt wurde und dass das Aktualisieren oder Wiederherstellen einer Datenbank von einer früheren Version die vorherige Seitenüberprüfungsmethode beibehalten würde. dh es gab kein implizites Upgrade.

Das Problem besteht darin, dass wir eine Produktionsdatenbank haben, die mit SQL Server 2000 in Produktion gegangen ist und seitdem auf einen SQL Server 2008 R2-Server umgezogen ist. Die Seitenüberprüfung ist auf Keine gesetzt, als ich erwartet hatte, dass die Seitenerkennung zerrissen ist . Wenn wir diese Zeitspanne zurückverfolgen, glauben wir, dass die Datenbank ursprünglich in SQL Server 7.0 entwickelt und dann auf SQL Server 2000 migriert wurde, und dies könnte das beobachtete Ergebnis erklären.

Ich habe mich gefragt, wann " Torn Page Detection" und " Checksum" zu einer Funktion von SQL Server wurden und wie sie sich bei der Migration oder Aktualisierung auf neuere Versionen verhielten.

Edit: Fasse einige der Antworten zusammen:

Es gibt eine kleine Diskriminierung in Bezug auf einige der Daten, an denen Torn Page Detection in SQL Server eingeführt wurde.
Link 1: http://support.microsoft.com/kb/230785
Link 2: http://technet.microsoft.com/en-us/library/aa337525(v=sql.90).aspx

Der erste Link kennzeichnet SQL 7.0 und der zweite SQL2000. Ich neige dazu, auf den SQL7.0-Vorschlag zu vertrauen, und der zweite Link war verwirrt, weil er in SQL7.0 standardmäßig deaktiviert und in SQL2000 standardmäßig aktiviert ist.

Paul
quelle
2
Es wurde eingeführt, als der Code festgeschrieben wurde.
Swasheck
Warum spielt es eine Rolle? Was ist das Problem, das hier gelöst wird?
Marian
@swasheck - Entschuldigung, ich verstehe deinen Kommentar nicht.
Paul
1
@Paul hat für die Wiedereröffnung gestimmt
swasheck
1
@Paul Ich habe dbcc-Seiteninformationen hinzugefügt, um in meiner Antwort nach zerrissenen Seiten oder Prüfsummenbits zu suchen.
Kin Shah

Antworten:

15

Wenn Sie in SQL Server 2000 beschädigte Seiten identifizieren möchten, sollte die Datenbankoption TORN_PAGE_DETECTION auf TRUE gesetzt sein.

In SQL 2005 und höher hat eine neue Einstellung PAGE_VERIFY die alte TORN_PAGE_DETECTION ersetzt, mit der zwei verschiedene Arten der Seitenüberprüfung ausgewählt werden können: TORN_PAGE_DETECTION und CHECKSUM.

Nun stellt sich die Frage, welches gesetzt werden soll - TORN_PAGE_DETECTION oder CHECKSUM?

TORN_PAGE_DETECTION - Schreibt ein Bit für jeweils 512 Byte auf einer Seite, sodass Sie erkennen können, wenn eine Seite nicht erfolgreich auf die Festplatte geschrieben wurde. Der Haken ist, dass es Ihnen nicht sagt, ob die in diesen 512 Bytes gespeicherten Daten tatsächlich korrekt sind oder nicht, da möglicherweise einige Bytes falsch geschrieben wurden.

CHECKSUM - berechnet eine Prüfsumme der Seite sowohl beim Schreiben als auch beim Lesen einer Seite, vorausgesetzt, sie enthält eine Prüfsumme.

Der SQL Server berechnet die Prüfsumme basierend auf dem Bitmuster auf der Seite, speichert sie im Seitenkopf und gibt dann eine E / A aus, um die Seite zu schreiben. Wenn der SQL Server die Seite liest, berechnet er die Prüfsumme mit derselben Logik neu und vergleicht sie dann mit dem im Seitenkopf verfügbaren Wert. Wenn der Prüfsummenwert übereinstimmt, wird davon ausgegangen, dass die Seite während des Schreib- / Lesezyklus nicht beschädigt wurde.

Da die Kosten für die Berechnung der Prüfsumme beim Lesen und Schreiben jeder Seite anfallen, kann dies den CPU-Overhead erhöhen und möglicherweise den Durchsatz Ihrer Arbeitslast beeinträchtigen. Beachten Sie außerdem, dass die Prüfsumme für ein bestimmtes Bitmuster auf der Seite nicht eindeutig ist. Möglicherweise können zwei Seiten demselben Prüfsummenwert zugeordnet werden. Es besteht also die Möglichkeit, dass eine Seitenbeschädigung unentdeckt bleibt.

Referenz: Prüfsumme in SQL2005

Um Ihre Fragen gezielt zu beantworten:

Ich glaube, dass Checksum in SQL2005 eingeführt wurde und dass das Aktualisieren oder Wiederherstellen einer Datenbank von einer früheren Version die Methode zur Überprüfung der vorherigen Seite beibehalten würde. dh es gab kein implizites Upgrade.

Ja, CHECKSUM wurde in SQL Server 2005 eingeführt und ist das DEFAULT . Wenn Sie von 2000 auf 2005 aktualisieren, müssen Sie die Datenbankoption Page Verify explizit ändern, um CHECKSUM zu verwenden.

Wenn Sie die bereits in SQL 2005 erstellte Datenbank auf einem anderen Server wiederherstellen, auf dem SQL 2005 ausgeführt wird, müssen Sie sie nicht festlegen. Es bleibt so lange bestehen, wie Sie die Option "Seitenüberprüfung" aktiviert haben.

Es ist mir nicht gelungen zu recherchieren, als Torn Page Detection einging

Von: http://support.microsoft.com/kb/230785

Versionen von SQL Server vor 7.0

Frühere Versionen von SQL Server als 7.0 boten keine Protokollparität oder Funktionen zur Erkennung zerrissener Bits. Tatsächlich können diese Versionen dieselbe Protokollseite mehrmals schreiben, bis die Protokolldatensätze die 2-KB-Protokollseite ausfüllen. Dies kann Transaktionen offenlegen, die erfolgreich festgeschrieben wurden. Wenn die Protokollseite während eines Fehlers neu geschrieben wird, wird ein Sektor mit der festgeschriebenen Transaktion möglicherweise nicht ordnungsgemäß neu geschrieben.

Daher gibt es TORN_PAGE_DETECTION seit SQL Server 7.0. Selbst dann war die Standardeinstellung, dass es nicht aktiviert war (gleicher Link) .

Hinweis: Die Erkennung zerrissener Seiten ist in SQL Server 7.0 standardmäßig nicht aktiviert. In sp_dboption erfahren Sie, wie Sie die Erkennung auf Ihrem System aktivieren.

Wenn die Datenbank für eine 7.0-Instanz entwickelt und anschließend aktualisiert worden wäre, hätte sie daher die vorhandene Option PAGE VERIFY von NONE (wie in seiner Antwort unter @ThomasStringer angegeben) aktualisiert.


Edit: 24.09.2013 So verbessern Sie die Antwort:

Unter Bezugnahme auf meine internen SQL Server-Notizen von SQLSkills stellte ich fest, dass Sie mithilfe eines Seitenabbilds überprüfen können, ob die Erkennung von Bitabrissen (TORN_PAGE_DETECTION oder CHECKSUM) aktiviert war oder nicht:

use database_name -- change here for your database !!
checkpoint
go 
dbcc traceon (3604)   -- send output to screen
go
dbcc page (dbaalert, 1,1,0)
dbcc traceoff (3604)  -- turn off the trace flag
go

m_tornBits : Enthält entweder die Seitenprüfsumme oder die Bits, die durch die Schutzbits für zerrissene Seiten verschoben wurden - je nachdem, welche Form des Seitenschutzes für die Datenbank aktiviert ist.

Hinweis : Ich habe keine älteren SQL Server-Versionen ausgeführt. Unten wird von SQL Server 2000 und höher bestätigt . Wenn du ein 7.0 oder 6.5 hast, kannst du es auch bestätigen :-)

Bildbeschreibung hier eingeben

Kin Shah
quelle
@Kin aye Ich weiß, dass es in SQL2000 auch war, würde gerne wissen, wann es zum ersten Mal eingeführt wurde. Durch den Ausdruck "Auf frühere Versionen verschieben" wollen wir so tun, als wäre TPD in SQL2000 eingeführt worden, und dann würde das Verschieben von SQL7 auf SQL2000 zwischen Versionen vor SQL2005 verschoben. Ich bin gespannt, ob TPD bei solchen Migrationen aktiviert wurde. Ich gehe voll und ganz davon aus, dass es nicht möglich gewesen wäre, dies zu verifizieren.
Paul
@paul Ich habe sie gelöscht, weil ich das Gefühl hatte, dass meine Bearbeitung die Kommentare umfasste
swasheck
@Kin Ich habe Ihren DBCC-Code in SQL2008R2 ausprobiert und einen m_tornbits-Wert von 1711843878 erhalten. Das ist also eher eine Kennzahl als ein Boolescher Wert.
Paul
@Paul bedeutet, dass die Prüfsumme oder die Zielseite eingeschaltet ist. Ab 2005 sollten Sie sich für Only CHECKSUM entscheiden. Sie fragen sich, ob Sie 7.0 zum Testen haben?
Kin Shah
6

Schauen Sie sich die Referenz von BOL an :

Wenn ein Benutzer oder eine Systemdatenbank auf SQL Server 2005 oder eine neuere Version aktualisiert wird, bleibt der Wert PAGE_VERIFY (NONE oder TORN_PAGE_DETECTION) erhalten. Wir empfehlen die Verwendung von CHECKSUM

Dies schreibt vor, dass vor SQL Server 2005 die Option für TORN_PAGE_DETECTIONvorhanden war, jedoch nicht CHECKSUM.

Und um Ihren zweiten Punkt zu beantworten:

... und dass das Aktualisieren oder Wiederherstellen einer Datenbank von einer früheren Version die vorherige Seitenüberprüfungsmethode beibehalten würde.

Ja, das ist richtig. Sie müssen die Datenbank explizit festlegen, um die CHECKSUMSeitenüberprüfungsmethode zu verwenden.

Thomas Stringer
quelle
Vielen Dank für den Hinweis @Thomas, der jedoch nicht beantwortet wird, als TORN PAGE DETECTION zum ersten Mal in SQL Server verfügbar wurde.
Paul
2
@Paul Dies ist eine Antwort darauf, dass vor SQL Server 2005 eine zerrissene Seitenerkennung vorhanden war. Suchen Sie nach der Version von SQL Server, in der die Seitenüberprüfung ausgeführt wurde? Abgesehen von einer Geschichtsstunde bin ich mir nicht sicher, was Sie dort erreichen wollen. Welches Problem genau versuchen Sie zu lösen?
Thomas Stringer
Ich wollte wissen, wann es entstanden ist und wie es sich bei Migrationen verhält. Ich hoffe zu verstehen, wie einige unserer sehr alten DBs die Einstellungen haben, die sie auf einigen unserer modernen (ish, SQL2008R2) Server vornehmen.
Paul
Wenn Ihre Datenbanken über TORN_PAGE_DETECTION verfügen, kann dies mit Sicherheit zu einem Upgrade von einem Server vor SQL Server 2005 führen, und die Option zur Seitenüberprüfung wurde beibehalten.
Thomas Stringer
Sie haben keine TPD aktiviert, das war der verwirrende Teil. Andere Antworten haben jetzt die Lösung für das Problem geliefert (SQL 7.0 hatte TPD, war jedoch nicht standardmäßig aktiviert, und dies war die Version, gegen die ursprünglich entwickelt wurde)
Paul
3

In modernen SQL Server gibt es zwei verschiedene Optionen für die Seitenüberprüfung

Wie Sie angegeben haben, gibt es drei: TORN_PAGE_DETECTION, CHECKSUM und NONE.

Ich glaube, CHECKSUM wurde in SQL Server 2005 eingeführt

Wie aus diesem MSDN-Artikel mit dem Titel "Buffer Management" (Pufferverwaltung) hervorgeht: In SQL Server 2000 wurde die Erkennung zerrissener Seiten eingeführt. In SQL Server 2005 wurde die Prüfsumme eingeführt.

Eine Übersicht über andere in diesem Artikel erwähnte Dinge ist, dass der Seitenüberprüfungsmechanismus zum Zeitpunkt der Datenbankerstellung angegeben wird. Es hängt also davon ab, wer und wie die Datenbank erstellt hat, auf was sie eingestellt ist. Dies kann auch durch die Konfiguration der Modelldatenbank gesteuert werden. Interessant ist auch, dass eine Änderung der Einstellung nicht für die gesamte Datenbank gilt, sondern nur, wenn auf die nächste Seite geschrieben wird. Paul Randal zufolge erfolgt dies auch nur, wenn die Seite in den Speicher eingelesen, geändert und dann auf die Festplatte zurückgeschrieben wird. Diese Info ist hier .

Ich habe eine Produktionsdatenbank, die mit SQL Server 2000 in Produktion gegangen ist, obwohl sie möglicherweise für SQL Server 7.0 entwickelt wurde und seitdem auf einen SQL Server 2008 R2-Server verschoben wurde. Page Verify ist auf NONE gesetzt, obwohl ich erwartet habe, dass es sich um TORN PAGE DETECTION handelt.

Jeder, der über Berechtigungen für die Datenbankinstanz verfügt, kann diesen Wert ändern. Es könnte durch Upgrades, wie auf MSDN hier angegeben, bestehen bleiben :

Wenn ein Benutzer oder eine Systemdatenbank auf SQL Server 2005 oder eine neuere Version aktualisiert wird, bleibt der Wert PAGE_VERIFY (NONE oder TORN_PAGE_DETECTION) erhalten

Es könnte auch zu einem späteren Zeitpunkt geändert worden sein, weil jemand die Konfiguration falsch verstanden und im Dunkeln fotografiert hat, um ein Problem zu lösen.

Ich habe mich gefragt, wann TORN PAGE DETECTION zu einer Funktion zur Seitenüberprüfung wurde

SQL Server 2000 wie oben angegeben.

wie es sich verhält, wenn es migriert oder auf neuere Editionen aktualisiert wird.

Die vorherige Einstellung bleibt während des Upgrades wie oben angegeben erhalten.

Jetzt möchte ich darauf hinweisen, dass andere von Leuten bereitgestellte Links besagen, dass SQL Server 7.0 zum Zeitpunkt der Erkennung von Seitenrissen verfügbar war. Wie in diesen Artikeln dargelegt, ist es jedoch vielfach bewiesen, dass die Microsoft-Dokumentation nicht unter allen Umständen als wahr angesehen werden sollte. Es gibt viele, bei denen sie falsch liegen. Wie können Sie dann feststellen, welche Antwort akzeptabel ist? Wir alle haben Dokumentation von Microsoft zur Verfügung gestellt, um unsere Antwort zu unterstützen.

Beachten Sie auch, dass die Erkennung von zerrissenen Seiten ab SQL Server 2012 in der Abschreibungsliste aufgeführt ist. Worauf kommt es also an, wie sie für Ihre Datenbanken festgelegt wurden? Wenn ich sah, dass etwas anderes als CHECKSUM eingestellt war, ändere ich es sofort und gehe zu einer anderen wichtigeren Aufgabe über. Ich habe keine Bedenken, wie eine fehlerhafte Konfiguration eingerichtet wurde. Es ist wichtiger, sie zu korrigieren und dann sicherzustellen, dass diejenigen, die über die Berechtigung zum Ändern verfügen, darüber informiert werden, warum dieses Konfigurationselement nicht in etwas anderes geändert werden sollte. Nur meine 0,02 $

Shawn Melton
quelle
Ich denke, dass 2000 war, als TPD auf ON voreingestellt war. Wie bei vielen anderen neuen SQL Server-Funktionen wird sie standardmäßig deaktiviert / deaktiviert und die DBAs werden gezwungen, sie zu aktivieren. Jedenfalls +1 von mir für die Abwertungswarnung.
Swasheck
Es ist ein guter Punkt, Sie haben einen guten Link, der zu unterstützen scheint, was Sie sagen. Ich habe jedoch das Gefühl, dass ein Link, der von einer anderen Person bereitgestellt wurde ( support.microsoft.com/kb/230785 ), diesen ersetzt. Ich bin eher der Meinung, dass der Abschnitt zur Pufferverwaltung die Hälfte falsch verstanden hat als der andere Link. Wenn das Sinn macht, bin ich mir nicht ganz sicher, ob ich mich gut auskenne!
Paul
Es ist eines dieser Dinge wie Lizenzierung, nichts, was MS darüber aussagt, ist auch sehr klar ...
Shawn Melton
0

Wie sowohl @Thomas Stringer als auch @Kin sagten, wurde es in SQL Server 2005 eingeführt, und ich glaube, es funktioniert in allen Editionen von SQL Server. Für TempDB wurde CHECKSUM in SQL Server 2008 eingeführt

http://blogs.msdn.com/b/sqlserverstorageengine/archive/2008/03/23/checksum-and-tempdb.aspx

DaniSQL
quelle
Danke @DaniSQL, jedoch hat noch niemand die Frage vollständig beantwortet. dh wann wurde TORN PAGE DETECTION eingeführt und wie hat es sich während Upgrades / Migrationen verhalten.
Paul
Ich überlasse es den Historikern, dies herauszufinden :-) Bei den Upgrades / Migrationen geschieht nichts, es sei denn, Sie ändern die Option zur Seitenüberprüfung in jeder Datenbank manuell auf CHECKSUM. Selbst dann haben bereits vorhandene Seiten keine Prüfsumme. blogs.msdn.com/b/sqlserverstorageengine/archive/2006/06/29/…
DaniSQL
danke @DaniSQL, so verstehe ich Migrationen zu SQL2005 und höher, um zu funktionieren. Ich wollte nur sicherstellen, dass frühere Versionen dieses Verhalten beibehalten
Paul