Udostępnij za pośrednictwem


Zarządzanie zasobami przestrzeni bazy danych Tempdb

Dotyczy: SQL Server 2025 (17.x) Preview i nowsze wersje

Po włączeniu tempdb zarządzania zasobami przestrzeni, zwiększasz niezawodność i unikasz przestojów, uniemożliwiając uruchamianie zapytań lub obciążeń, które zużywają dużą ilość przestrzeni w tempdb.

Począwszy od programu SQL Server 2025 (17.x) (wersja zapoznawcza), możesz użyć zarządcy zasobów, aby wymusić limit całkowitej tempdb ilości miejsca zużywanego przez grupę obciążeń. Grupę obciążeń można skojarzyć z aplikacją, użytkownikiem, grupą użytkowników itp. Gdy żądanie (zapytanie) próbuje przekroczyć limit, zarządca zasobów przerywa je z wyraźnym błędem wskazującym, że limit grupy obciążeń został wymuszony.

W efekcie można podzielić przestrzeń udostępnioną tempdb na różne obciążenia. Można na przykład ustawić wyższy limit dla grupy obciążeń używanej przez aplikację o znaczeniu krytycznym i ustawić niższy limit dla default grupy obciążeń używanej przez wszystkie inne obciążenia.

Przykłady konfiguracji krok po kroku można znaleźć w temacie Samouczek: Przykłady konfigurowania zarządzania zasobami przestrzeni tempdb.

Rozpocznij pracę z zarządcą zasobów

Zarządca zasobów udostępnia elastyczną strukturę do ustawiania różnych tempdb limitów przestrzeni dla różnych aplikacji, użytkowników, grup użytkowników itp. Limity można również ustawić na podstawie logiki niestandardowej.

Jeśli dopiero zaczynasz korzystać z zarządcy zasobów w programie SQL Server, zobacz Zarządca zasobów , aby dowiedzieć się więcej o jego pojęciach i możliwościach.

Aby zapoznać się z przewodnikiem po konfiguracji zarządcy zasobów i najlepszymi rozwiązaniami, zobacz Tutorial: Resource governor configuration examples and best practices (Samouczek: przykłady konfiguracji zarządcy zasobów i najlepsze rozwiązania).

Ustawianie limitów użycia miejsca w bazie danych tempdb

Możesz ograniczyć tempdb zużycie miejsca przez grupę roboczą na jeden z następujących dwóch sposobów:

  • Ustaw stały limit przy użyciu argumentu GROUP_MAX_TEMPDB_DATA_MB .

    Stały limit jest przydatny, gdy wymagania dotyczące użycia obciążenia tempdb są znane z wyprzedzeniem lub gdy tempdb rozmiar nie zmienia się.

  • Ustaw limit procentu przy użyciu argumentu GROUP_MAX_TEMPDB_DATA_PERCENT .

    Limit procentu jest przydatny, gdy można zmienić maksymalny rozmiar tempdb w czasie i chcesz tempdb , aby miejsce dostępne dla każdej grupy obciążeń zmieniało się proporcjonalnie bez ponownego konfigurowania zarządcy zasobów. Na przykład, jeśli zwiększysz rozmiar maszyny wirtualnej na platformie Azure z uruchomionym SQL Server i zwiększysz maksymalny rozmiar tempdb, przestrzeń tempdb dostępna dla każdej grupy obciążeń z limitem procentowym również się zwiększa.

Aby uzyskać więcej informacji na temat argumentów GROUP_MAX_TEMPDB_DATA_MB i GROUP_MAX_TEMPDB_DATA_PERCENT, zobacz CREATE WORKLOAD GROUP (TWORZENIE GRUPY OBCIĄŻEŃ) lub ALTER WORKLOAD GROUP (ALTER WORKLOAD GROUP).

Jeśli dla tej samej grupy obciążeń określono zarówno limity stałe, jak i procentowe, stały limit ma pierwszeństwo przed limitem procentu.

W danym wystąpieniu programu SQL Server możesz mieć kombinację grup obciążeń ze stałymi limitami, limitami procentowymi lub bez limitów tempdb zużycia miejsca.

Konfiguracja limitu procentowego

Limity procentowe obowiązują tylko wtedy, gdy tempdb konfiguracja pliku danych spełnia wymagania podsumowane w poniższej tabeli:

Konfiguracja Opis Maksymalny rozmiar bazy danych Tempdb (100%) Limit procentowy obowiązuje
- GROUP_MAX_TEMPDB_DATA_MB nie jest ustawiona
- Dla wszystkich plików danych MAXSIZE nie jest UNLIMITED
- Dla wszystkich plików danych FILEGROWTH nie jest równy zeru
tempdb pliki danych mogą się automatycznie powiększać do maksymalnego rozmiaru Suma MAXSIZE wartości dla wszystkich plików danych Tak
- GROUP_MAX_TEMPDB_DATA_MB nie jest ustawiona
- Dla wszystkich plików danych MAXSIZE jest UNLIMITED
- Dla wszystkich plików danych, FILEGROWTH wynosi zero
tempdb pliki danych są wstępnie dopasowywane do ich zamierzonych rozmiarów i nie mogą się rozwijać dalej Suma SIZE wartości dla wszystkich plików danych Tak
Wszystkie inne konfiguracje Nie.

Następujące zapytanie umożliwia wyświetlenie bieżącej tempdb konfiguracji pliku danych:

SELECT file_id,
       name,
       size * 8. / 1024 AS size_mb,
       IIF(max_size = -1, NULL, max_size * 8. / 1024) AS maxsize_mb,
       IIF(is_percent_growth = 0, growth * 8. / 1024, NULL) AS filegrowth_mb,
       IIF(is_percent_growth = 1, growth, NULL) AS filegrowth_percent
FROM sys.master_files
WHERE database_id = 2
      AND
      type_desc = 'ROWS';

Dla danego pliku w zestawie wyników:

  • Jeśli kolumna maxsize_mb jest NULL, to MAXSIZE jest UNLIMITED.
  • Gdy wartość filegrowth_mb lub filegrowth_percent jest równa zero, wtedy FILEGROWTH jest równe zero.

Jeśli ustawisz GROUP_MAX_TEMPDB_DATA_PERCENT i wykonasz instrukcję ALTER RESOURCE GOVERNOR RECONFIGURE , ale konfiguracja pliku danych nie spełnia wymagań, instrukcja zostanie ukończona pomyślnie, a limity procentowe są przechowywane, ale nie są wymuszane. W takim przypadku zostanie wyświetlony komunikat ostrzegawczy 10989, ważność 10, GROUP_MAX_TEMPDB_DATA_PERCENT nie jest w mocy, ponieważ wymagania dotyczące konfiguracji bazy danych tempdb nie są spełnione. Komunikat jest również rejestrowany w dzienniku błędów.

Aby wdrożyć limity procentowe, skonfiguruj ponownie tempdb pliki danych, aby spełnić wymagania i ponownie wykonaj ALTER RESOURCE GOVERNOR RECONFIGURE. Aby uzyskać więcej informacji na temat konfigurowania SIZE , FILEGROWTH i MAXSIZE, zobacz ALTER DATABASE File and Filegroup Options (Opcje ALTER DATABASE File i Filegroup).

Uwaga / Notatka

W przypadku nowego wystąpienia programu SQL Server, plik danych MAXSIZE jest UNLIMITED, a FILEGROWTH jest większy niż zero, co oznacza, że limity procentowe nie są skuteczne. Aby użyć limitów procentowych, należy wykonać następujące czynności:

  • Wstępnie przenieś tempdb pliki danych do ich zamierzonych rozmiarów i ustaw na FILEGROWTH zero.
  • Ustaw MAXSIZE każdego pliku danych na ograniczoną wartość.
    • Dla każdego tempdb woluminu pliku danych upewnij się, że suma MAXSIZE wartości dla plików na woluminie jest mniejsza lub równa dostępnej przestrzeni dyskowej na woluminie.

      Jeśli na przykład wolumin ma 100 GB wolnego miejsca i zawiera dwa tempdb pliki danych, ustaw MAXSIZE każdy plik na rozmiar 50 GB lub mniej.

Jeśli obowiązuje limit procentu i dodajesz, usuwasz lub zmieniasz rozmiar tempdb plików danych, musisz wykonać ALTER RESOURCE GOVERNOR RECONFIGURE polecenie , aby zaktualizować zarządcę zasobów przy użyciu nowego maksymalnego rozmiaru tempdb (100%).

Jak to działa

W tej sekcji opisano szczegółowo zarządzanie zasobami kosmicznymi.

  • W miarę przydzielania i cofania przydziału stron tempdb danych zarządca zasobów utrzymuje księgowość tempdb miejsca zużywanego przez każdą grupę obciążeń.

    Jeśli zarządca zasobów jest włączony, a limit zużycia miejsca jest ustawiony dla grupy obciążenia, zaś zapytanie uruchomione w tej grupie próbuje zwiększyć całkowite zużycie miejsca przez grupę powyżej tego limitu, zapytanie zostanie przerwane z błędem 1138, stopień 17, tempdb

    Gdy żądanie zostanie przerwane z błędem 1138, wartość w kolumnie total_tempdb_data_limit_violation_count widoku dynamicznego zarządzania sys.dm_resource_governor_workload_groups jest zwiększona o jeden, a rozszerzone zdarzenie tempdb_data_workload_group_limit_reached zostaje uruchomione.

  • Zarządca zasobów śledzi wszystkie tempdb użycia, które można przypisać grupie roboczej, w tym tabele tymczasowe, zmienne (w tym zmienne tabelowe), parametry wartości tabeli, tabele nietymczasowe, kursory i tempdb użycie podczas przetwarzania zapytań, takie jak przepełnienia, tabele robocze i pliki robocze.

    Zużycie miejsca dla globalnych tabel tymczasowych i tabel nietymczasowych w tempdb jest uwzględniane w grupie roboczej, która wstawia pierwszy wiersz do tabeli, nawet jeśli sesje w innych grupach roboczych dodają, modyfikują lub usuwają wiersze w tej samej tabeli.

  • Skonfigurowane tempdb limity użycia dla każdej grupy obciążeń są widoczne w widoku katalogu sys.resource_governor_workload_groups w kolumnach group_max_tempdb_data_mb i group_max_tempdb_data_percent .

    Bieżąca konsumpcja i szczytowa konsumpcja tempdb miejsca dla grupy obciążeń są widoczne w widoku dynamicznym sys.dm_resource_governor_workload_groups w kolumnach tempdb_data_space_kb i peak_tempdb_data_space_kb.

    Wskazówka

    kolumny tempdb_data_space_kb i peak_tempdb_data_space_kb w sys.dm_resource_governor_workload_groups są zachowywane, nawet jeśli nie ustawiono żadnych limitów zużycia miejsca tempdb.

    Możesz utworzyć funkcję klasyfikatora i grupy obciążeń bez uprzedniego ustawiania limitów. Monitoruj tempdb użycie poszczególnych grup w miarę upływu czasu, aby ustanowić reprezentatywne wzorce użycia, a następnie ustaw limity zgodnie z potrzebami.

  • Tempdb użycie przez magazyny wersji, w tym magazyn wersji trwałej (PVS), gdy przyspieszone odzyskiwanie bazy danych (ADR) jest włączone w tempdb, nie podlega regulacji, ponieważ wersje wierszy mogą być używane przez różne grupy obciążeń.

  • Zużycie miejsca w programie tempdb jest uwzględniane jako liczba używanych stron danych o rozmiarze 8 KB. Nawet jeśli strona nie jest całkowicie wypełniona danymi, dodaje 8 KB do tempdb użycia przez grupę obciążeń.

  • Tempdb zarządzanie przestrzenią jest prowadzone przez cały okres istnienia grupy roboczej. Jeśli grupa obciążeń zostanie usunięta, gdy globalne tabele tymczasowe lub tabele nietymczasowe z danymi przypisanymi do tej grupy obciążeń pozostaną w tempdb, miejsce używane przez te tabele nie jest uwzględniane w żadnej innej grupie obciążeń.

  • Tempdb zarządzanie zasobami przestrzeni kontroluje przestrzeń w tempdb plikach danych, ale nie przestrzeń dyskową na woluminach podstawowych. O ile nie wstępnie utworzysz tempdb plików danych do ich zamierzonych rozmiarów, miejsce na woluminach, gdzie znajduje się tempdb, może być zajęte przez inne pliki. Jeśli nie pozostało miejsca na tempdb zwiększenie rozmiaru plików danych, to tempdb może zabraknąć miejsca, zanim zostanie osiągnięty limit przestrzeni dla grupy roboczej na zużycie przestrzeni tempdb.

  • Zarządzanie zasobami przestrzeni w programie tempdb dotyczy plików danych, ale nie pliku dziennika transakcji. Aby upewnić się, że dziennik transakcji tempdb nie zużywa dużej ilości miejsca, włącz ADR w tempdb.

Różnice w śledzeniu przestrzeni na poziomie sesji

Widok DMV sys.dm_db_session_space_usage zapewnia tempdb statystyki alokacji i dealokacji przestrzeni dla każdej sesji. Nawet jeśli w grupie obciążeń istnieje tylko jedna sesja, statystyki użycia miejsca udostępniane przez ten widok DMV mogą nie odpowiadać dokładnie statystykom podanym w widoku sys.dm_resource_governor_workload_groups z następujących powodów:

  • W przeciwieństwie do sys.dm_resource_governor_workload_groups, sys.dm_db_session_space_usage:
    • Nie odzwierciedla tempdb wykorzystania miejsca przez obecnie wykonywane zadania. Statystyki w programie sys.dm_db_session_space_usage są aktualizowane po zakończeniu zadania. Statystyki w programie sys.dm_resource_governor_workload_groups są stale aktualizowane.
    • Nie śledzi stron mapy alokacji indeksu (IAM). Aby uzyskać więcej informacji, zobacz Podręcznik architektury stron i zakresów.
  • Po usunięciu wierszy lub po usunięciu lub obcięciu tabeli, indeksu lub partycji strony danych mogą zostać cofnięte przez asynchroniczny proces w tle. Dealokacja strony może wystąpić z opóźnieniem. sys.dm_resource_governor_workload_groups odzwierciedla te dealokacje stron w miarę ich występowania, nawet jeśli sesja, która spowodowała te dealokacje, została zamknięta i nie jest już obecna w sys.dm_db_session_space_usage.

Najlepsze rozwiązania dotyczące ładu zasobów przestrzeni bazy danych tempdb

Przed skonfigurowaniem tempdb zarządzania zasobami przestrzeni należy wziąć pod uwagę następujące najlepsze praktyki:

  • Zapoznaj się z ogólnymi najlepszymi rozwiązaniami dotyczącymi zarządcy zasobów.

  • W przypadku większości scenariuszy należy unikać ustawiania limitu tempdb zużycia miejsca na małą wartość lub zero, szczególnie w przypadku default grupy obciążeń. Jeśli to zrobisz, wiele typowych zadań może rozpocząć się niepowodzeniem, jeśli trzeba przydzielić miejsce w programie tempdb. Jeśli na przykład ustawiono stały lub procentowy limit na 0 dla default grupy obciążeń, być może nie będzie można otworzyć Eksploratora obiektów w programie SQL Server Management Studio (SSMS).

  • Jeśli nie utworzono niestandardowych grup obciążeń i funkcji klasyfikatora, która umieszcza obciążenia w ich dedykowanych grupach, unikaj ograniczania użycia tempdb przez grupy obciążeń default. Może powodować przerwanie zapytań z błędem 1138, gdy tempdb nadal ma nieużywane miejsce, które nie może być wykorzystane przez żadne obciążenie użytkownika.

  • Jest dozwolone, aby suma GROUP_MAX_TEMPDB_DATA_MB wartości dla wszystkich grup obciążeń przekraczała maksymalny tempdb rozmiar. Jeśli na przykład maksymalny tempdb rozmiar wynosi 100 GB, GROUP_MAX_TEMPDB_DATA_MB limity dla grupy obciążeń A i grupy obciążeń B mogą wynosić 80 GB.

    Takie podejście nadal uniemożliwia każdej grupie obciążeń zużycie całego miejsca w tempdb, pozostawiając 20 GB dla innych grup obciążeń. Jednocześnie unikasz niepotrzebnych przerwań zapytań, gdy tempdb wolne miejsce jest nadal dostępne, ponieważ grupy obciążeń A i B prawdopodobnie nie będą zużywać dużej ilości tempdb miejsca w tym samym czasie.

    Podobnie suma GROUP_MAX_TEMPDB_DATA_PERCENT wartości dla wszystkich grup obciążeń może przekroczyć 100 procent. Jeśli wiesz, że wiele grup jest mało prawdopodobne, że spowodują wysokie tempdb obciążenie w tym samym czasie, możesz przydzielić więcej tempdb miejsca do każdej grupy.