Kiedy do SQL Server wprowadzono wykrywanie rozdartych stron i sumę kontrolną i jakie są zachowania związane z aktualizacją?

15

Istnieją dwie różne opcje we współczesnym SQL Server do weryfikacji strony; jest rozdarty Detection stronę i kontrolna . Żadna nie jest oczywiście opcją.

Wierzę, że suma kontrolna została wprowadzona w SQL Server 2005 i że uaktualnienie lub przywrócenie bazy danych z poprzedniej wersji zachowałoby metodę weryfikacji poprzedniej strony. tzn. nie było niejawnej aktualizacji.

Problem polega na tym, że mamy produkcyjną bazę danych, która została uruchomiona przy użyciu SQL Server 2000 i od tego czasu została przeniesiona na serwer SQL Server 2008 R2. Weryfikacja strony jest ustawiona na Brak, gdy spodziewałem się, że będzie to wykrywanie rozdartej strony . Cofając się o ten czas, wydaje nam się, że DB został pierwotnie opracowany w SQL Server 7.0, a następnie migrowany do SQL Server 2000, co może tłumaczyć obserwowany wynik.

Zastanawiałem się, kiedy Wykrywanie stron i suma kontrolna stały się funkcją SQL Server i jak się zachowywały po migracji lub aktualizacji do nowszych wersji.

Edycja: Podsumowując niektóre odpowiedzi:

Istnieje niewielka rozbieżność w niektórych datach, w których wykrycie strony rozdartej pojawiło się w SQL Server.
Link 1: http://support.microsoft.com/kb/230785
Link 2: http://technet.microsoft.com/en-us/library/aa337525(v=sql.90).aspx

Pierwsze łącze wskazuje SQL 7.0, a drugie SQL2000. Zwykle wierzę w sugestię SQL7.0 i ten link dwa był zdezorientowany, ponieważ domyślnie jest wyłączony w SQL7.0 i domyślnie włączony w SQL2000.

Paweł
źródło
2
został wprowadzony, gdy kod został zatwierdzony.
swasheck
Dlaczego to ma znaczenie? Jaki problem jest tutaj rozwiązany?
Marian
@swasheck - przepraszam, nie rozumiem twojego komentarza.
Paul
1
@Paul głosował, aby ponownie otworzyć
swasheck
1
@Paul W swojej odpowiedzi dodałem informacje o stronie dbcc, aby sprawdzić podarte strony lub bity sumy kontrolnej.
Kin Shah,

Odpowiedzi:

15

W SQL Server 2000, jeśli chcesz zidentyfikować uszkodzone strony, to dla opcji bazy danych TORN_PAGE_DETECTION należy ustawić wartość PRAWDA.

Ale w SQL 2005 i nowszych nowe ustawienie PAGE_VERIFY zastąpiło stary TORN_PAGE_DETECTION, który pozwala wybierać spośród dwóch różnych rodzajów weryfikacji strony: TORN_PAGE_DETECTION i CHECKSUM.

Teraz pojawia się pytanie, które ustawić - TORN_PAGE_DETECTION lub CHECKSUM?

TORN_PAGE_DETECTION - zapisuje trochę na każde 512 bajtów na stronie, umożliwiając wykrycie, kiedy strona nie została pomyślnie zapisana na dysk. Chodzi o to, że nie powie ci, czy dane przechowywane w tych 512 bajtach są rzeczywiście poprawne, czy nie, z powodu faktu, że kilka bajtów mogło być zapisanych niepoprawnie.

SUMA KONTROLNA - obliczy sumę kontrolną strony zarówno podczas pisania strony, jak i podczas czytania strony, przy założeniu, że ma na niej sumę kontrolną.

SQL Server oblicza sumę kontrolną na podstawie wzorca bitowego na stronie, przechowuje ją w nagłówku strony, a następnie wydaje polecenie We / Wy w celu zapisania strony. Gdy SQL Server odczytuje stronę, ponownie oblicza sumę kontrolną przy użyciu tej samej logiki, a następnie porównuje ją z wartością dostępną w nagłówku strony. Jeśli wartość sumy kontrolnej się zgadza, to zakłada się, że strona nie uległa uszkodzeniu podczas cyklu zapisu i odczytu.

Ponieważ koszt obliczenia sumy kontrolnej jest ponoszony na każdej stronie do odczytu i zapisu, może to zwiększyć obciążenie procesora i może mieć wpływ na przepustowość obciążenia. Należy także pamiętać, że suma kontrolna nie jest unikalna dla określonego wzorca bitowego na stronie. Dwie strony mogą być przyporządkowane do tej samej wartości sumy kontrolnej. Istnieje więc możliwość, że uszkodzenie strony może pozostać niewykryte.

Odniesienie: Suma kontrolna w SQL2005

Aby dokładnie odpowiedzieć na twoje pytania:

Wierzę, że suma kontrolna została wprowadzona w SQL2005 i że uaktualnienie lub przywrócenie bazy danych z poprzedniej wersji zachowałoby jej metodę weryfikacji poprzedniej strony. tzn. nie było niejawnej aktualizacji.

Tak, CHECKSUM zostało wprowadzone w SQL Server 2005 i jest DOMYŚLNE . Podczas aktualizacji z 2000 do 2005 musisz jawnie zmienić opcję bazy danych Page Verify, aby użyć CHECKSUM.

Jeśli przywrócisz bazę danych już utworzoną w SQL 2005 na innym serwerze z SQL 2005, nie musisz go ustawiać. Zachowa się na tym, co ustawiłeś opcję Weryfikuj stronę.

Nie udało mi się zbadać, kiedy pojawiło się Wykrywanie stron

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

Wersje SQL Server wcześniejsze niż 7.0

Wersje programu SQL Server starsze niż 7.0 nie zapewniały funkcji wykrywania parzystości dziennika ani wykrywania rozdartego bitu. W rzeczywistości te wersje mogą zapisywać tę samą stronę dziennika wiele razy, dopóki rekordy dziennika nie wypełnią strony dziennika o wielkości 2 KB. Może to ujawnić transakcje, które zostały pomyślnie zatwierdzone. Jeśli strona dziennika jest przepisywana podczas awarii, sektor z zatwierdzoną transakcją może nie zostać poprawnie przepisany.

Tak więc TORN_PAGE_DETECTION istnieje od SQL Server 7.0. Nawet wtedy domyślnie było to, że nie było włączone (ten sam link) .

Uwaga Wykrywanie rozdartych stron nie jest domyślnie włączone w SQL Server 7.0. Zobacz sp_dboption, aby dowiedzieć się, jak włączyć wykrywanie w systemie.

Dlatego, jeśli baza danych została opracowana dla instancji 7.0, a następnie zaktualizowana, zaktualizowałaby opcję z zachowaną opcją PAGE VERIFY NONE (jak zauważył @ThomasStringer w swojej odpowiedzi).


Edytuj: 24.09.2013 Aby poprawić odpowiedź:

Odnosząc się do moich wewnętrznych notatek SQL Server z SQLSkills, odkryłem, że za pomocą zrzutu strony możesz sprawdzić, czy wykrywanie rozdartych bitów - TORN_PAGE_DETECTION lub CHECKSUM zostało włączone, czy nie:

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 : przechowuje sumę kontrolną strony lub bity, które zostały zastąpione bitami ochrony rozdartych stron - w zależności od tego, jaką formą ochrony strony jest włączone dla bazy danych.

Uwaga : Nie mam uruchomionych żadnych starszych wersji serwera SQL. Poniżej potwierdzono z serwera SQL 2000 i nowszych . Jeśli masz uruchomioną wersję 7.0 lub 6.5, możesz to również potwierdzić :-)

wprowadź opis zdjęcia tutaj

Kin Shah
źródło
@Kin aye Wiem, że było to również w SQL2000, chciałbym wiedzieć, kiedy został wprowadzony po raz pierwszy. przez wyrażenie „przejście do wcześniejszych wersji” udawajmy, że w SQL2000 wprowadzono TPD, a następnie przejście z SQL7 do SQL2000 spowoduje przejście między wersjami wcześniejszymi niż SQL2005. Chcę wiedzieć, czy podczas takich migracji włączono TPD. W pełni oczekuję, że nie, ale nie byłby w stanie tego zweryfikować.
Paul
@paul Usunąłem je, ponieważ czułem, że moja edycja obejmowała komentarze
swasheck 24.09.2013
@Kin Próbowałem kodu DBCC na SQL2008R2 i otrzymałem wartości m_tornbits 1711843878 .. więc jest to raczej miara niż wartość logiczna?
Paul
@Paul oznacza, że ​​suma kontrolna lub strona robaka są włączone. W wersji A2005 i nowszej powinieneś wybrać Only CHECKSUM. Zastanawiasz się, czy masz jakieś 7,0 do testowania?
Kin Shah,
6

Spójrz na referencję z BOL :

Po uaktualnieniu bazy danych użytkownika lub systemu do SQL Server 2005 lub nowszej wersji wartość PAGE_VERIFY (NONE lub TORN_PAGE_DETECTION) zostaje zachowana. Zalecamy skorzystanie z usługi CHECKSUM

To dyktuje, że przed SQL Server 2005 opcja TORN_PAGE_DETECTIONistniała, ale nie CHECKSUM.

Aby odpowiedzieć na drugi punkt:

... a uaktualnienie lub przywrócenie bazy danych z poprzedniej wersji zachowałoby jej metodę weryfikacji poprzedniej strony.

Tak to jest poprawne. Trzeba będzie jawnie ustawić bazę danych, aby korzystać z CHECKSUMmetody weryfikacji strony.

Thomas Stringer
źródło
Dzięki za odniesienie @ Thomas, ale to nie odpowiada, kiedy DIAGNOSTYKA STRONY TORN po raz pierwszy stała się dostępna w SQL Server.
Paul
2
@Paul To odpowiedź na to, że wykrywanie podartych stron istniało przed SQL Server 2005. Czy szukasz wersji SQL Server, którą weryfikacja strony weszła w grę? Oprócz lekcji historii nie jestem pewien, co chcesz tam zyskać. Jaki dokładnie problem próbujesz rozwiązać?
Thomas Stringer
Szukałem, kiedy to powstało i jak zachowało się podczas migracji. Mam nadzieję, że zrozumiem, w jaki sposób niektóre z naszych bardzo starych baz danych mają ustawienia, które wykonują na niektórych naszych nowoczesnych serwerach (ish, SQL2008R2).
Paul
Jeśli Twoje bazy danych mają TORN_PAGE_DETECTION, może to z pewnością spowodować aktualizację z wersji wcześniejszej niż SQL Server 2005 i ta opcja weryfikacji strony pozostała.
Thomas Stringer
nie mają włączonego TPD, co było zaskakującą częścią. Inne odpowiedzi dostarczyły rozwiązanie tego problemu (SQL7.0 miał TPD, ale domyślnie nie jest włączony i była to wersja pierwotnie opracowana przeciwko)
Paul
3

Istnieją dwie różne opcje we współczesnym SQL Server do weryfikacji strony

Istnieją trzy, jak powiedziałeś: TORN_PAGE_DETECTION, CHECKSUM i NONE.

Uważam, że CHECKSUM zostało wprowadzone w SQL Server 2005

Jak cytowano w tym artykule MSDN zatytułowanym „Zarządzanie buforami”: w SQL Server 2000 wprowadzono wykrywanie podartych stron. W SQL Server 2005 wprowadzono sumę kontrolną.

Streszczenie innych rzeczy odnotowanych w tym artykule jest takie, że mechanizm weryfikacji strony jest określony podczas tworzenia bazy danych. Zależy więc od tego, kto i jak utworzyli bazę danych, co do tego, do czego jest ustawiona, może być również kontrolowany przez to, na jakiej bazie danych model jest skonfigurowany. Warto również zauważyć, że zmiana ustawienia nie ma wpływu na całą bazę danych, tylko gdy strona jest zapisywana jako następna. Według Paula Randala dzieje się tak tylko wtedy, gdy strona jest wczytywana do pamięci, zmieniana, a następnie zapisywana z powrotem na dysk; ta informacja jest tutaj .

Mam produkcyjną bazę danych, która została uruchomiona przy użyciu programu SQL Server 2000, chociaż mogła zostać opracowana w oparciu o SQL Server 7.0 i od tego czasu została przeniesiona na serwer SQL Server 2008 R2. Weryfikacja strony jest ustawiona na BRAK, chociaż spodziewałem się, że będzie to WYKRYWANIE STRONY PODGLĄDU.

Każdy, kto ma uprawnienia do instancji bazy danych, może zmodyfikować tę wartość. Mógł się utrzymywać przez aktualizacje, jak podano w MSDN tutaj :

Po uaktualnieniu bazy danych użytkownika lub systemu do SQL Server 2005 lub nowszej wersji wartość PAGE_VERIFY (NONE lub TORN_PAGE_DETECTION) zostaje zachowana

Mogło to zostać zmodyfikowane później, ponieważ ktoś źle zrozumiał konfigurację i strzelał w ciemności, aby spróbować rozwiązać problem.

Zastanawiałem się, kiedy WYKRYWANIE STRONY TORN stało się funkcją weryfikacji strony

SQL Server 2000, jak podano powyżej.

jak się zachowuje po migracji lub aktualizacji do nowszych wersji.

Poprzednie ustawienie zostaje zachowane podczas aktualizacji, jak podano powyżej.

Teraz chciałbym zwrócić uwagę na fakt, że inne łącza dostarczane przez ludzi wskazują, że SQL Server 7.0 jest wtedy, gdy dostępne jest wykrywanie rozdartej strony. Co, jak stwierdzono w tych artykułach, jest prawdą, jednak wielokrotnie udowodniono, że dokumentacja Microsoft nie powinna być traktowana jako prawda we wszystkich okolicznościach. Jest wielu tam, gdzie się mylą. W związku z tym, w jaki sposób można ustalić, która odpowiedź jest dopuszczalna? Wszyscy dostarczyliśmy dokumentację Microsoft na poparcie naszej odpowiedzi.

Należy również pamiętać, że wykrywanie podartych stron znajduje się na liście amortyzacji od wersji SQL Server 2012, więc jaki jest problem z tym, jak zostało to ustawione w bazach danych na początek. Jeśli zobaczyłem, że jest ustawiony na coś innego niż CHECKSUM, natychmiast go zmieniam i przechodzę do innego ważniejszego zadania. Nie przejmuję się tym, jak została wprowadzona zła konfiguracja, ważniejsze jest, aby ją poprawić, a następnie upewnić się, że osoby mające uprawnienia do jej zmiany są informowane o tym, dlaczego ten element konfiguracji nie powinien zostać zmieniony na nic innego. Tylko moje 0,02 $


źródło
Myślę, że w 2000 roku TPD domyślnie było WŁĄCZONE. Podobnie jak w przypadku wielu innych nowych funkcji programu SQL Server, domyślnie zwolnią go jako wyłączone / wyłączone i wymuszą włączenie DBA. W każdym razie +1 ode mnie za ostrzeżenie o rezygnacji.
swasheck
To dobra uwaga, masz dobry link, który wydaje się tworzyć kopię zapasową tego, co mówisz. Ale czuję, że link podany przez kogoś innego ( support.microsoft.com/kb/230785 ) zastępuje go. Bardziej prawdopodobne jest, że sekcja zarządzania buforem popełniła błąd w połowie, niż w przypadku innego linku. Jeśli to ma sens, nie jestem do końca pewien, czy dobrze sobie radzę!
Paul
Jest to jedna z tych rzeczy, takich jak licencjonowanie, nic MS nie
0

Jak zarówno @Thomas Stringer, jak i @Kin powiedział, że został wprowadzony w SQL Server 2005 i uważam, że działa we wszystkich wersjach SQL Server. W przypadku TempDB wprowadzono CHECKSUM w SQL Server 2008

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

DaniSQL
źródło
Dzięki @DaniSQL, jednak nikt jeszcze nie odpowiedział na to pytanie w całości. tj. kiedy wprowadzono WYKRYWANIE STRONY TORN i jak się zachowywała podczas aktualizacji / migracji.
Paul
Pozostawię to historykom, aby się dowiedzieli :-) Jeśli chodzi o aktualizację / migrację, nic się nie stanie, chyba że ręcznie zmienisz opcję weryfikacji strony na CHECKSUM w każdej bazie danych. Nawet wtedy już istniejące strony nie będą miały sumy kontrolnej. blogs.msdn.com/b/sqlserverstorageengine/archive/2006/06/29/…
DaniSQL
dzięki @DaniSQL, właśnie tak rozumiem migracje do SQL2005 i wyższych, aby działać. Chciałem tylko upewnić się, że poprzednie wersje również zachowały to zachowanie
Paul