Udostępnij przez


Zapisywanie stron w silniku bazy danych

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL Database w Microsoft Fabric

We/Wy w przypadku wystąpienia silnika bazy danych obejmuje logiczne i fizyczne zapisy. Zapis logiczny występuje, gdy dane są modyfikowane na stronie w pamięci podręcznej buforu. Zapis fizyczny występuje, gdy strona jest zapisywana z pamięci podręcznej buforu na dysk.

Gdy strona jest modyfikowana w pamięci podręcznej buforu, nie jest natychmiast zapisywana z powrotem na dysku; Zamiast tego strona jest oznaczona jako zanieczyszczona. Oznacza to, że strona może zawierać więcej niż jeden zapis logiczny, zanim zostanie on fizycznie zapisany na dysku. Dla każdego zapisu logicznego w pamięci podręcznej dziennika jest wstawiany rekord dziennika transakcji, który rejestruje modyfikację. Rekordy dziennika muszą być zapisywane na dysku, zanim skojarzona brudna strona zostanie usunięta z pamięci podręcznej i zapisana na dysku.

Program SQL Server używa techniki znanej jako rejestrowanie z wyprzedzeniem zapisu (WAL), która uniemożliwia zapisanie zanieczyszczonej strony przed zapisaniem skojarzonego rekordu dziennika na dysku. Jest to niezbędne do poprawnej pracy menedżera odzyskiwania. Aby uzyskać więcej informacji, zobacz Zapisywanie w dzienniku transakcji z wyprzedzeniem.

Jak program SQL Server zapisuje zmodyfikowaną stronę danych

Poniższa ilustracja przedstawia proces pisania zmodyfikowanej strony danych.

Zrzut ekranu przedstawiający Writing_Pages.

Gdy menedżer zapisuje stronę, wyszukuje sąsiadujące zanieczyszczone strony, które można uwzględnić w jednej operacji zbierania-zapisu. Sąsiadujące strony mają kolejne identyfikatory stron i pochodzą z tego samego pliku; strony nie muszą być ciągłe w pamięci. Wyszukiwanie będzie kontynuowane zarówno do przodu, jak i do tyłu do momentu wystąpienia jednego z następujących zdarzeń:

  • Znaleziono czystą stronę.
  • Znaleziono 32 strony.
  • Znaleziono brudną stronę, której numer sekwencji dziennika (LSN) nie został jeszcze zapisany w dzienniku.
  • Znaleziono stronę, która nie może być od razu zablokowana.

W ten sposób cały zestaw stron można zapisywać na dysku za pomocą jednej operacji zbierania i zapisu.

Tuż przed zapisaniem strony do strony jest dodawana forma ochrony strony określona w bazie danych.

  • Jeśli dodano ochronę strony przed uszkodzeniami, strona musi być zatrzaśnięta wyłącznie (EX) do operacji we/wy. Dzieje się tak, ponieważ rozdarta ochrona strony modyfikuje stronę, co sprawia, że nie nadaje się do odczytania dowolnego innego wątku.

  • Jeśli dodano ochronę strony sumy kontrolnej lub baza danych nie używa ochrony strony, strona jest zablokowana zatrzaskiem aktualizacji (UP) dla operacji we/wy. To zatrzasanie uniemożliwia innym osobom modyfikowanie strony podczas zapisu, ale nadal umożliwia czytelnikom korzystanie z niej.

Aby uzyskać więcej informacji na temat opcji ochrony stron we/wy dysku, zobacz Zarządzanie buforem.

Jak brudne strony są zapisywane na dysku

Brudna strona jest zapisywana na dysku na jeden z trzech sposobów:

Leniwe pisanie, chętne pisanie i procesy punktów kontrolnych nie czekają na ukończenie operacji we/wy. Zawsze używają asynchronicznych (lub nakładających się) operacji we/wy i kontynuują inną pracę, sprawdzając powodzenie we/wy później. Dzięki temu program SQL Server może zmaksymalizować zasoby CPU i I/O dla odpowiednich zadań.

Proces leniwego zapisu

Leniwy pisarz to proces systemowy, który utrzymuje dostępność wolnych buforów poprzez usuwanie rzadko używanych stron z buforu pamięci podręcznej. Brudne strony są najpierw zapisywane na dysku.

Chętny proces zapisu

Chętny proces zapisu zapisuje zanieczyszczone strony danych skojarzone z minimalnie rejestrowanymi operacjami, takimi jak wstawianie zbiorcze i wybieranie. Ten proces umożliwia równoległe tworzenie i pisanie nowych stron. Oznacza to, że operacja wywołująca nie musi czekać, aż cała operacja zakończy się przed zapisaniem stron na dysku.

Proces punktu kontrolnego

Proces punktu kontrolnego okresowo skanuje pamięć podręczną buforu pod kątem ze stronami z określonej bazy danych i zapisuje wszystkie zanieczyszczone strony na dysku. Punkty kontrolne oszczędzają czas podczas późniejszego odzyskiwania, tworząc punkt, w którym zagwarantowano zapisanie wszystkich zanieczyszczonych stron na dysku.

Użytkownik może zażądać operacji punktu kontrolnego przy użyciu CHECKPOINT polecenia lub aparat bazy danych może wygenerować automatyczne punkty kontrolne na podstawie ilości używanego miejsca w dzienniku i czasu, który upłynął od ostatniego punktu kontrolnego. Ponadto punkt kontrolny jest generowany, gdy wystąpią pewne działania. Na przykład po dodaniu lub usunięciu danych lub pliku dziennika z bazy danych albo zatrzymaniu wystąpienia programu SQL Server.

Aby uzyskać więcej informacji, zobacz Punkty kontrolne i aktywna część dziennika.