Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy: SQL Server 2025 (17.x) 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 SQL Server 2025 (17.x), możesz użyć zarządcy zasobów, aby wymusić limit całkowitej tempdb ilości miejsca zużywanego przez grupę obciążeń. 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ń jest wymuszany.
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 SQL Server, zobacz zarządcę zasobów, aby dowiedzieć się więcej na temat jego pojęć i możliwości.
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.Użyj ustalonego limitu, gdy znasz wymagania dotyczące użycia obciążenia
tempdbz wyprzedzeniem lub gdytempdbrozmiar nie ulegnie zmianie.Ustaw limit procentu przy użyciu argumentu
GROUP_MAX_TEMPDB_DATA_PERCENT.Użyj limitu procentowego, jeśli możesz zmienić maksymalny rozmiar
tempdbw czasie i chcesztempdb, aby miejsce dostępne dla każdej grupy obciążeń zmieniało się proporcjonalnie bez zmiany konfiguracji grupy obciążeń. Na przykład, jeśli zwiększysz rozmiar maszyny wirtualnej na platformie Azure z uruchomionym SQL Server i zwiększysz maksymalny rozmiartempdb, przestrzeńtempdbdostępna dla każdej grupy obciążeń z limitem procentowym również się zwiększa.
Aby uzyskać więcej informacji o argumentach GROUP_MAX_TEMPDB_DATA_MB i GROUP_MAX_TEMPDB_DATA_PERCENT, zobacz CREATE WORKLOAD GROUP lub ALTER WORKLOAD GROUP.
Jeśli określisz zarówno stałe, jak i procentowe limity dla tej samej grupy obciążeń, 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. Aby wyświetlić efektywne limity, zobacz przykład Wyświetlanie efektywnych limitów miejsca w tempdb dla każdej grupy obciążeń.
Konfiguracja limitu procentowego
Po uruchomieniu instrukcji ALTER RESOURCE GOVERNOR RECONFIGURE limity procentowe obowiązują zgodnie z następującą tabelą:
| Konfiguracja | Opis | Maksymalny rozmiar bazy danych Tempdb (100%) | Limit procentowy obowiązuje |
|---|---|---|---|
-
GROUP_MAX_TEMPDB_DATA_MB nie jest ustawiona- W przypadku wszystkich plików danych MAXSIZE nie dotyczy UNLIMITED- Dla wszystkich plików danych wartość FILEGROWTH nie wynosi zero |
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. |
Aby wyświetlić konfigurację tempdb, zobacz przykład Wyświetlanie konfiguracji plików danych tempdb.
W przypadku korzystania z limitów procentowych należy wziąć pod uwagę następujące kwestie:
Jeśli ustawisz
GROUP_MAX_TEMPDB_DATA_PERCENTi wykonasz instrukcję ALTER RESOURCE GOVERNOR RECONFIGURE , ale konfiguracja pliku danych nie spełnia wymagań, instrukcja zakończy się pomyślnie, a limity procentowe są przechowywane, ale nie są wymuszane. W takim przypadku zostanie wyświetlony komunikat ostrzegawczy 10989, ważność 10, która jest również rejestrowana w dzienniku błędów:GROUP_MAX_TEMPDB_DATA_PERCENT is not in effect because tempdb configuration requirements aren't met.Aby wdrożyć limity procentowe, skonfiguruj ponownie
tempdbpliki danych, aby spełnić wymagania i ponownie wykonajALTER RESOURCE GOVERNOR RECONFIGURE. Aby uzyskać więcej informacji na temat konfigurowaniaSIZEplików ,FILEGROWTHiMAXSIZE, zobacz ALTER DATABASE Opcje plików i grup plików.Jeśli obowiązuje limit procentu i dodajesz, usuwasz lub zmieniasz rozmiar
tempdbplików danych, musisz wykonaćALTER RESOURCE GOVERNOR RECONFIGUREpolecenie , aby zaktualizować zarządcę zasobów przy użyciu nowego maksymalnego rozmiarutempdb(100%).
Uwaga / Notatka
W przypadku nowego wystąpienia SQL Server plik danych MAXSIZE ma wartość UNLIMITED, a FILEGROWTH jest większe od zera, co oznacza, że limity procentowe nie są efektywne. Aby użyć limitów procentowych, należy wykonać następujące czynności:
- Wstępnie przenieś
tempdbpliki danych do ich zamierzonych rozmiarów i ustaw naFILEGROWTHzero. - Ustaw
MAXSIZEkażdego pliku danych na ograniczoną wartość. - Dla każdego
tempdbwoluminu pliku danych upewnij się, że sumaMAXSIZEwartoś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 dwatempdbpliki danych, ustawMAXSIZEkażdy plik na rozmiar 50 GB lub mniej.
Jak to działa
W tej sekcji opisano szczegółowo zarządzanie zasobami kosmicznymi.
W miarę przydzielania i cofania przydziału stron
tempdbdanych zarządca zasobów utrzymuje księgowośćtempdbmiejsca zużywanego przez każdą grupę obciążeń.Jeśli funkcja Resource Governor jest włączona i dla grupy obciążeń ustawiono limit wykorzystania przestrzeni
tempdb, a żądanie (zapytanie) uruchomione w tej grupie obciążeń próbuje spowodować, że łączne wykorzystanie przestrzenitempdbprzez grupę przekroczy ten limit, żądanie zostanie przerwane z błędem 1138 o poziomie ważności 17:Could not allocate a new page for database 'tempdb' because that would exceed the limit set for workload group 'workload-group-name'".Gdy żądanie zostanie przerwane z błędem 1138, wartość w kolumnie
total_tempdb_data_limit_violation_countwidoku dynamicznego zarządzania sys.dm_resource_governor_workload_groups jest zwiększona o jeden, a rozszerzone zdarzenietempdb_data_workload_group_limit_reachedzostaje uruchomione.Zarządca zasobów śledzi wszystkie
tempdbużycia, które można przypisać grupie roboczej, w tym tabele tymczasowe, zmienne (w tym zmienne tabelowe), parametry wartości tabeli, tabele nietymczasowe, kursory itempdbużycie podczas przetwarzania zapytań, takie jak przepełnienia, tabele robocze i pliki robocze.Zużycie miejsca dla globalnych tabel tymczasowych i tabel nietymczasowych w
tempdbjest 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
tempdblimity użycia dla każdej grupy obciążeń są widoczne w widoku katalogu sys.resource_governor_workload_groups w kolumnachgroup_max_tempdb_data_mbigroup_max_tempdb_data_percent.Bieżąca konsumpcja i szczytowa konsumpcja
tempdbmiejsca dla grupy obciążeń są widoczne w widoku dynamicznym sys.dm_resource_governor_workload_groups w kolumnachtempdb_data_space_kbipeak_tempdb_data_space_kb.Wskazówka
kolumny
tempdb_data_space_kbipeak_tempdb_data_space_kbw sys.dm_resource_governor_workload_groups są zachowywane, nawet jeśli nie ustawiono żadnych limitów zużycia miejscatempdb.Możesz utworzyć funkcję klasyfikatora i grupy obciążeń bez uprzedniego ustawiania limitów. Monitoruj
tempdbużycie poszczególnych grup w miarę upływu czasu, aby ustanowić reprezentatywne wzorce użycia, a następnie ustaw limity zgodnie z potrzebami.tempdbużycie przez magazyny wersji, w tym magazyn wersji trwałej (PVS), gdy przyspieszone odzyskiwanie bazy danych (ADR) jest włączone wtempdb, nie podlega regulacji, ponieważ wersje wierszy mogą być używane przez różne grupy obciążeń.Zużycie miejsca w programie
tempdbjest 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 dotempdbużycia przez grupę obciążeń.tempdbzarzą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ą wtempdb, miejsce używane przez te tabele nie jest uwzględniane w żadnej innej grupie obciążeń.tempdbzarządzanie zasobami przestrzeni kontroluje przestrzeń wtempdbplikach danych, ale nie przestrzeń dyskową na woluminach podstawowych. Jeśli wcześniej nie zwiększysz rozmiaru plików danychtempdbdo ich docelowych rozmiarów, miejsce na woluminach, na których znajduje siętempdb, może zostać zajęte przez inne pliki. Jeśli nie pozostało miejsca natempdbzwiększenie rozmiaru plików danych, totempdbmoże zabraknąć miejsca, zanim zostanie osiągnięty limit przestrzeni dla grupy roboczej na zużycie przestrzenitempdb.Zarządzanie zasobami przestrzeni w programie
tempdbdotyczy plików danych, ale nie pliku dziennika transakcji. Aby upewnić się, że dziennik transakcjitempdbnie zużywa dużej ilości miejsca, włącz ADR wtempdb.
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 z tego widoku DMV mogą nie być dokładnie zgodne ze statystykami 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
tempdbwykorzystania miejsca przez obecnie wykonywane zadania. Statystyki w programiesys.dm_db_session_space_usagesą aktualizowane po zakończeniu zadania. Statystyki w programiesys.dm_resource_governor_workload_groupssą stale aktualizowane. - Nie śledzi stron mapy alokacji indeksu (IAM). Aby uzyskać więcej informacji, zobacz Podręcznik architektury strony i zakresu.
- Nie odzwierciedla
- Po usunięciu wierszy lub po usunięciu albo obcięciu tabeli, indeksu bądź partycji silnik bazy danych zwalnia strony danych. Zwolnienie pamięci może być przeprowadzane synchronicznie lub realizowane przez asynchroniczny proces działający w tle.
sys.dm_resource_governor_workload_groupsodzwierciedla 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 wsys.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
tempdbzużycia miejsca na małą wartość lub zero, szczególnie w przypadkudefaultgrupy obciążeń. Jeśli ustawisz ten limit na niewielką wartość lub zero, wiele typowych zadań może zacząć kończyć się niepowodzeniem, jeśli wymagają przydzielenia miejsca wtempdb. Jeśli na przykład ustawiono stały lub procentowy limit na 0 dladefaultgrupy obciążeń, być może nie będzie można otworzyć Eksploratora obiektów w programie SQL Server Management Studio (SSMS).Jeśli nie utworzysz niestandardowych grup obciążeń i funkcji klasyfikującej, która przypisuje obciążenia do przeznaczonych dla nich grup, unikaj ograniczania użycia grupy obciążeń
tempdbprzezdefault. Jeśli ograniczysztempdbzużycie miejsca przez grupędefaultobciążeń, zapytania mogą zwracać błąd 1138. Ten błąd występuje, gdytempdbnadal ma niewykorzystaną przestrzeń, której nie może wykorzystać żadne obciążenie użytkownika.Suma
GROUP_MAX_TEMPDB_DATA_MBwartości dla wszystkich grup obciążeń może przekraczać maksymalnytempdbrozmiar. Jeśli na przykład maksymalnytempdbrozmiar wynosi 100 GB,GROUP_MAX_TEMPDB_DATA_MBlimity 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ń, gdytempdbwolne miejsce jest nadal dostępne, ponieważ grupy obciążeń A i B prawdopodobnie nie będą zużywać dużej ilościtempdbmiejsca w tym samym czasie.Podobnie suma
GROUP_MAX_TEMPDB_DATA_PERCENTwartości dla wszystkich grup obciążeń może przekroczyć 100 procent. Jeśli wiesz, że wiele grup jest mało prawdopodobne, że spowodują wysokietempdbobciążenie w tym samym czasie, możesz przydzielić więcejtempdbmiejsca do każdej grupy.
Examples
Wyświetlanie konfiguracji pliku danych bazy danych tempdb
Następujące zapytanie przedstawia bieżącą tempdb konfigurację 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_mbjestNULL, toMAXSIZEjestUNLIMITED. - Gdy wartość
filegrowth_mblubfilegrowth_percentjest równa zero, wtedyFILEGROWTHjest równe zero.
Wyświetlanie obowiązujących limitów miejsca w bazie danych tempdb na grupę obciążeń
Poniższe zapytanie przedstawia efektywny tempdb limit zużycia miejsca dla każdej grupy obciążeń. Limit jest zwracany w megabajtach dla konfiguracji limitu stałego lub procentowego limitu .
Jeśli kolumna group_effective_limit_mb to NULL, oznacza to jedną z następujących wartości:
- Nie skonfigurowano ani stałego, ani procentowego limitu.
- Wymagania dotyczące korzystania z konfiguracji limitu procentowego nie są spełnione.
SELECT wg.group_id,
wg.name,
tf.tempdb_max_size_mb,
CASE
WHEN wg.group_max_tempdb_data_mb IS NOT NULL
THEN wg.group_max_tempdb_data_mb
WHEN wg.group_max_tempdb_data_percent IS NOT NULL AND tf.tempdb_max_size_mb IS NOT NULL
THEN 0.01 * wg.group_max_tempdb_data_percent * tf.tempdb_max_size_mb
ELSE NULL END AS group_effective_limit_mb
FROM sys.resource_governor_workload_groups AS wg
CROSS APPLY (
SELECT IIF (SUM(IIF (max_size <> -1
AND growth > 0, 1, 0)) = COUNT(1) /* autogrow up to the maxsize */
OR SUM(IIF (max_size = -1
AND growth = 0, 1, 0)) = COUNT(1), /* pregrown and fixed */
SUM(IIF (growth = 0, size, max_size)) * 8 / 1024., NULL) AS tempdb_max_size_mb
FROM sys.master_files
WHERE database_id = 2
AND type_desc = 'ROWS'
) AS tf;
Następny krok
Treści powiązane
- Zarządca zasobów
- Samouczek: przykłady konfiguracji zarządcy zasobów i najlepsze rozwiązania
- ALTER RESOURCE GOVERNOR (Transact-SQL)
- CREATE WORKLOAD GROUP (Transact-SQL)
- ALTER WORKLOAD GROUP (Transact-SQL)
- DROP WORKLOAD GROUP (Transact-SQL)
- sys.resource_governor_workload_groups (Transact-SQL)
- sys.dm_resource_governor_workload_groups (Transact-SQL)