Jak ważne są VLF dziennika transakcji dla wydajności?


12

Jak ważne są VLF przy rozważaniu wydajności bazy danych? Co opisałoby optymalną sytuację dla VLF?


Więcej informacji można znaleźć na moim pytaniu pod adresem dba.stackexchange.com/questions/25408/...
Max Vernon,

Fajnie - widzę, że jest to pomocne w raportowaniu wyników
the_good_pony

1
@DBAWaffle Odwołaj się do: Eksperymenty z VLF SQL Server, część 1 od Glenna Berry'ego -> sqlskills.com/blogs/glenn/…
Kin Shah

Odpowiedzi:


17

Co to jest wirtualny plik dziennika?

SQL Server dzieli plik dziennika transakcji dla każdej bazy danych na mniejsze porcje, zwane „wirtualnymi plikami dzienników” (w skrócie VLF). Ich podstawową funkcją są znaczniki obcięcia podczas tworzenia kopii zapasowej dziennika, tzn. SQL Server usunie (i zaznaczy dostępne do ponownego użycia) VLF, które są całkowicie puste. MSDN ma artykuł na temat dziennika transakcji - architektura fizyczna .

Co decyduje o liczbie VLF?

Za każdym razem, gdy rośnie plik dziennika (niezależnie od tego, czy jest to wzrost automatyczny, czy ręczny), nowa sekcja pliku dziennika jest dzielona na kilka VLF, wyłącznie w oparciu o rozmiar nowej sekcji (istniejący dziennik transakcji jest pozostawiony w spokoju). Tak więc małe ustawienia autogrowth (tj. Domyślny 10% autogrowth) spowoduje utworzenie dużej liczby VLF.

Jakie są konsekwencje dużej liczby VLF?

Podstawowym problemem wielu przyczyn VLF jest:

  • Powolne odzyskiwanie (odzyskiwanie to faza podczas przywracania bazy danych, w której zakończone transakcje są zapisywane na stronach danych, a niekompletne transakcje są wycofywane).
  • Niska wydajność czytnika dziennika w konfiguracji dublowania bazy danych.
  • Niska wydajność podczas tworzenia migawki bazy danych (należy pamiętać, że obejmuje to również niektóre funkcje, DBCCponieważ używają migawek bazy danych w tle, aby ułatwić sprawdzanie spójności bez blokowania).

Jak mogę dowiedzieć się, ile VLF ma moja baza danych?

DBCC LOGINFOzwróci 1 wiersz dla każdego VLF w dzienniku transakcji bazy danych. To pytanie zawiera kilka przydatnych skryptów do zastosowania go we wszystkich bazach danych na serwerze.

Ile VLF jest za dużo?

To wezwanie do osądu, które musisz wykonać dla siebie. Moją osobistą zasadą jest to, że poniżej 50 nie warto się bawić, a ponad 100 (lub mniej więcej) i naprawiam ustawienia autogrowth i zapisuję w pamięci (w następnym oknie konserwacji), aby zmniejszyć i odrodzić dziennik (jak poniżej) .

Wsparcie! Mam jedenaście miliardów VLF i odzyskiwanie bazy danych trwa cały dzień!

Krótki zarys (z bloga Kimberly Tripp ):

  • Upewnij się, że jesteś jedynym aktywnym połączeniem w bazie danych (więc zrób to w oknie konserwacji)
  • Wykonaj kopię zapasową dziennika transakcji na dysk (używając BACKUP LOG)
  • Uruchom DBCC SHRINKFILEz TRUNCATEONLYskurczy plik dziennika do najmniejszej możliwej wielkości.
  • Uruchom, ALTER DATABASE [...] MODIFY FILE [...] SIZE=newsizeaby zmienić rozmiar dziennika transakcji w jednym kroku **.

** Uwaga - jeśli masz bardzo duży plik dziennika (dziesiątki GB lub więcej), możesz zmienić rozmiar w wielu krokach, aby uzyskać odpowiednią liczbę VLF o odpowiednim rozmiarze, aby uniknąć nadmiernie „grubych” kopii zapasowych dziennika. Ponieważ VLF są jednostką obcięcia, określają również rozmiary kopii zapasowych dziennika, jak wyszczególniono w blogu Kim .


Dzięki, czy myślisz, że wiele VLF-ów w bardziej oczywisty sposób obniżyłoby wydajność w środowisku o wysokim OLTP, w którym dane są regularnie zmieniane, a duża liczba zmian do przejścia?
the_good_pony

Duża liczba VLF jest naprawdę godna uwagi tylko w sytuacjach, które opisałem powyżej (odzyskiwanie, migawki, tworzenie kopii lustrzanych). Mogą nieco obniżyć wydajność w środowisku OLTP, ale tylko nieznacznie.
Simon Righarts,

1
Dla mnie odzyskanie ponad 20 godzin przekonało mnie o znaczeniu utrzymania niskiej (poniżej 1000) liczby VLF.
Max Vernon,

@SimonRigharts Jestem ciekawy. Czy duża liczba VLF wpływa w ogóle na regularne przeprowadzanie transakcji? Czy ma to wpływ tylko na tworzenie kopii zapasowych i przywracanie?
Chris Aldrich,

@ChrisAldrich Może istnieć niewielki poziom kosztów ogólnych na transakcji, jeśli obejmuje ona granicę VLF (ale jeśli nie słyszałem o tym), ale jak szczegółowo opisano w pytaniu, jedyny moment, w którym zauważysz wpływ duża liczba VLF znajduje się podczas odzyskiwania, tworzenia kopii lustrzanej lub migawek.
Simon Righarts
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.