Pytania dotyczące sklepu z wersją tempdb

9

Dzisiaj napotkaliśmy błąd:

Błąd: 3967, wskaźnik ważności: 17

i z tego co mogę powiedzieć, to w zasadzie „sklep z pełną wersją”. Pojawiło się kilka pytań, na które miałem problem z odpowiedzią, ponieważ w moim sklepie nigdy wcześniej nie mieliśmy tego błędu:

  • Jeśli istnieje ustawiony maksymalny rozmiar (na podstawie całkowitego rozmiaru tempdb lub inny), czy jest on dynamiczny?

  • Czy istnieje ustawienie, które uczyniłoby go dynamicznym, jeśli nie jest?

  • Czy na tej podstawie możemy skonfigurować alerty? (tj. DMV do śledzenia wielkości itp.)

Travis
źródło

Odpowiedzi:

7

Istotność 17 wskazuje, że w SQL Server zabrakło wymaganego zasobu. Zwykle widać to, gdy w bazie danych zabraknie miejsca. W tym przypadku wygląda na to, że tempdb jest używany do odczytu wierszy wersji zatwierdzonej izolacji migawki dla zapytania wymagającego przelania do tempdb.

Może to być dość powszechne, jeśli tempdb ma ograniczony maksymalny rozmiar i podjęta zostanie próba źle napisanego zapytania, które na przykład wykonuje bardzo duże sprzężenie krzyżowe.

Możesz użyć tego zapytania, aby zobaczyć bieżący rozmiar magazynu wersji w tempdb:

SELECT *
FROM sys.dm_os_performance_counters dopc
WHERE dopc.counter_name LIKE 'Version %';

Technet ma interesujący artykuł na temat korzystania ze sklepu z wersjami na https://technet.microsoft.com/en-us/library/cc966545.aspx#EDAA

Ta strona MSDN wspomina o błędzie 3967:

Gdy w tempdb zabraknie miejsca, aparat bazy danych zmusza magazyny wersji do zmniejszenia. Podczas procesu zmniejszania najdłużej działające transakcje, które nie wygenerowały jeszcze wersji wierszy, są oznaczane jako ofiary. Komunikat 3967 jest generowany w dzienniku błędów dla każdej transakcji ofiary. Jeśli transakcja jest oznaczona jako ofiara, nie może już czytać wersji wiersza w sklepie z wersjami. Podczas próby odczytu wersji wiersza generowany jest komunikat 3966, a transakcja jest wycofywana. Jeśli proces zmniejszania się powiedzie, przestrzeń będzie dostępna w tempdb.

Żadna ze stron, które podlinkowałem powyżej, nie zawiera wyraźnych porad na temat maksymalnego rozmiaru magazynu wersji w tempdb, co prowadzi mnie do przekonania, że ​​jedynym ograniczeniem jest maksymalny skonfigurowany rozmiar samej tempdb, pomniejszonej o to, ile miejsca używa się w tempdb dla inne przedmioty.

Max Vernon
źródło