Spis treści:

Kategoria:SQL Server


Dirty page, czyli brudne strony w SQL server

Co to są dirty pages?

Dirty page (po naszemu brudna strona) to najprościej mówiąc taka strona pamięci, która nie została jeszcze zapisana na dysk. Niektóre operacje sprawiają, że w buforze (cache) tworzona jest kopia strony z dysku twardego. Taka strona w pamięci podręcznej może się pojawiać na przykład po operacji UPDATE. W celach wydajnościowych zastosowano pewien prosty trik - modyfikacja rekordu lub rekordów sprawia, że zmianie ulega tylko kopia w pamięci, natomiast kopia na dysku pozostaje tymczasowo bez zmian. Aby rozpoznać takie przypadki, w których strona cache nie pokrywa się ze stroną na dysku, SQL Server ustawia w swoich wewnętrznych strukturach znacznik statusu DIRTY.

Strony z pamięci co jakiś czas zapisywane są na dysk. W momencie, gdy zawartość strony w pamięci pokryje się z zawartością strony na dysku, znacznik DIRTY zostaje zerowany. Po takiej operacji strony w pamięci podręcznej cache nie są już nazywane dirty pages, lecz clear (czyste). Pomijając nazewnictwo, warto wspomnieć o pewnej specyficznej instrukcji służącej do czyszczenia bufora cache, a mianowicie DBCC DROPCLEANBUFFERS. Jak sama nazwa wskazuje, czyści ona tylko bufory czyste, czyli takie, które są zgodne z ich odpowiednikami na dysku. Dirty pages nie są usuwane z pamięci podręcznej za pomocą tej instrukcji. Trzeba takie brudne strony wyczyścić.

Jak zamienić dirty pages na clean pages

Odpowiedź pewnie nie jest zaskakująca: w zasadzie to nic nie trzeba robić. Operacja zapisu brudnych stron pamięci na dysk twardy serwera wykonuje się automatyczne co pewien okres, a cała operacja nazywa się z angielskiego checkpointem. Odstęp między kolejnymi automatycznymi checkpointami zależy od wielu czynników. Są to między innymi ilość miejsca zajmowana przez log transakcji, a także czas, który upłynął od ostaniego checkpointa. Czas uaktywnienia się procesu zapisu brudnych danych na dysk może się znacząco różnić. Jeżeli na bazie wykonanych jest niewiele modyfikacji, SQL Server może czekać długo. Jeżeli modyfikacji jest dużo, brudne strony zapisywane są częściej. Nie powinno to dziwić, bo SQL Server musi w jakiś rozsądny sposób zarządzać pamięcią podręczną cache. Warto przypomnieć, że brudne strony nie mogą zostać usunięte z bufora, bo nie są w żadnym innym miejscu, poza oczywiście logiem, zapisane i oznaczałoby to konieczność przywracania danych właśnie z loga. Aby cache był, nazwijmy to sobie, modyfikowalny, brudne strony nie tyle powinny, co muszą być czyszczone.

Jeżeli mimo wzystko chcemy wymusić wykonanie się checkpointu (punktu przywracania), można posłużyć się następującą instrukcją:

CHECKPOINT

Kategoria:SQL Server

, 2013-12-20

Brak komentarzy - bądź pierwszy

Dodaj komentarz
Wyślij
Ostatnie komentarze
Dzieki za te informacje. były kluczowe
Dobrze wyjaśnione, dzięki !
a z innej strony - co gdybym ciąg znaków chciał mieć rozbity nie na wiersze a na kolumny? Czyli ciąg ABCD: 1. kolumna: A, 2. kolumna: B, 3. kolumna: C, 4 kolumna: D?
Ciekawy artykuł.
Czy można za pomocą EF wysłać swoje zapytanie?
Czy lepiej do tego użyć ADO.net i DataTable?