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
Azure SQL Managed Instance
Ten artykuł zawiera przykłady przewodników, które ułatwiają skonfigurowanie zarządcy zasobów i sprawdzenie, czy konfiguracja działa zgodnie z oczekiwaniami. Zaczyna się od prostego przykładu i przechodzi do bardziej złożonych.
Artykuł zawiera również przykłady zapytań monitorowania zarządcy zasobów i listę najlepszych rozwiązań zarządcy zasobów.
We wszystkich przykładach założono, że początkowo zarządca zasobów jest wyłączony i używa ustawień domyślnych oraz że nie istnieją żadne funkcje klasyfikatora, a także pule zasobów zdefiniowanych przez użytkownika, grupy obciążeń i klasyfikator.
Note
Aby zmodyfikować konfigurację zarządcy zasobów w usłudze Azure SQL Managed Instance, musisz być w kontekście bazy danych master w replice podstawowej.
Modyfikowanie grupy domyślnej
W tym przykładzie użyto zarządcy zasobów, aby ograniczyć maksymalny rozmiar przydziału pamięci dla wszystkich zapytań użytkownika. Odbywa się to przez zmniejszenie ustawienia REQUEST_MAX_MEMORY_GRANT_PERCENT dla grupy obciążeń default z domyślnych 25% do 10%. W przykładzie nie jest używana funkcja klasyfikatora. Oznacza to, że nie ma to wpływu na przetwarzanie logowania, a wszystkie sesje użytkowników będą nadal klasyfikowane w default grupie obciążeń.
Może być konieczne ograniczenie wielkości przydziałów pamięci, jeśli zapytania oczekują na pamięć, ponieważ inne zapytania zarezerwowały jej zbyt dużo. Aby uzyskać więcej informacji, zobacz Rozwiązywanie problemów z niską wydajnością lub małą ilością pamięci spowodowanych przez przydziały pamięci w SQL Server.
Zmodyfikuj domyślną grupę obciążeń.
ALTER WORKLOAD GROUP [default] WITH (REQUEST_MAX_MEMORY_GRANT_PERCENT = 10);Włącz zarządcę zasobów, aby nasza konfiguracja obowiązywała.
ALTER RESOURCE GOVERNOR RECONFIGURE;Zweryfikuj nowe ustawienie, w tym nowy maksymalny rozmiar przydziału pamięci.
SELECT group_id, wg.name AS workload_group_name, rp.name AS resource_pool_name, wg.request_max_memory_grant_percent_numeric AS request_max_memory_grant_percent, rp.max_memory_kb * wg.request_max_memory_grant_percent_numeric AS request_max_memory_grant_size_kb FROM sys.resource_governor_workload_groups AS wg INNER JOIN sys.dm_resource_governor_resource_pools AS rp ON wg.pool_id = rp.pool_id;Aby przywrócić początkową konfigurację, wykonaj następujący skrypt:
ALTER WORKLOAD GROUP [default] WITH (REQUEST_MAX_MEMORY_GRANT_PERCENT = 25); ALTER RESOURCE GOVERNOR RECONFIGURE; ALTER RESOURCE GOVERNOR DISABLE;
Używanie grupy obciążeń zdefiniowanej przez użytkownika
W tym przykładzie użyto zarządcy zasobów, aby upewnić się, że wszystkie żądania dotyczące sesji o określonej nazwie aplikacji nie są wykonywane z stopniem równoległości (DOP) wyższym niż cztery. Odbywa się to poprzez przypisanie sesji do grupy obciążeń z ustawieniem MAX_DOP ustawionym na 4.
Aby uzyskać więcej informacji na temat konfigurowania maksymalnego stopnia równoległości, zobacz Konfiguracja serwera: maksymalny stopień równoległości.
Utwórz grupę obciążenia, która ogranicza DOP. Grupa używa puli zasobów
default, ponieważ chcemy ograniczyć współczynnik DOP tylko dla konkretnej aplikacji, ale nie rezerwować ani nie ograniczać zasobów procesora, pamięci ani we/wy.CREATE WORKLOAD GROUP limit_dop WITH ( MAX_DOP = 4 ) USING [default];Utwórz funkcję klasyfikatora. Funkcja używa wbudowanej funkcji APP_NAME() w celu określenia nazwy aplikacji określonej w parametry połączenia klienta. Jeśli nazwa aplikacji jest ustawiona na
limited_dop_application, funkcja zwraca nazwę grupy obciążenia, która ogranicza DOP. W przeciwnym razie funkcja zwracadefaultjako nazwę grupy obciążenia.USE master; GO CREATE FUNCTION dbo.rg_classifier() RETURNS sysname WITH SCHEMABINDING AS BEGIN DECLARE @WorkloadGroupName sysname = N'default'; IF APP_NAME() = N'limited_dop_application' SELECT @WorkloadGroupName = N'limit_dop'; RETURN @WorkloadGroupName; END; GOZmodyfikuj konfigurację zarządcy zasobów, aby nasza konfiguracja stanie się skuteczna i włączyć zarządcę zasobów.
ALTER RESOURCE GOVERNOR WITH (CLASSIFIER_FUNCTION = dbo.rg_classifier); ALTER RESOURCE GOVERNOR RECONFIGURE;Wykonaj zapytanie sys.resource_governor_configuration w celu sprawdzenia, czy zarządca zasobów jest włączony i używa utworzonej funkcji klasyfikatora.
SELECT OBJECT_SCHEMA_NAME(classifier_function_id) AS classifier_schema_name, OBJECT_NAME(classifier_function_id) AS classifier_object_name, is_enabled FROM sys.resource_governor_configuration;classifier_schema_name classifier_object_name is_enabled ---------------------- ---------------------- ---------- dbo rg_classifier 1Sprawdź, czy sesje o określonej nazwie aplikacji są klasyfikowane w
limit_dopgrupie obciążeń, podczas gdy inne sesje będą nadal klasyfikowane wdefaultgrupie obciążeń. Użyjemy zapytania, w którym używane są widoki systemowe sys.dm_exec_sessions i sys.resource_governor_workload_groups, aby zwrócić nazwę aplikacji i nazwę grupy obciążenia dla bieżącej sesji.W programie SQL Server Management Studio (SSMS) wybierz pozycję Plik w menu głównym, Nowy, Zapytanie silnika bazy danych.
W oknie Połącz z Database Engine wskaż to samo wystąpienie silnika bazy danych, w którym wcześniej utworzono grupę obciążeń i funkcję klasyfikatora. Wybierz kartę Dodatkowe parametry połączenia , a następnie wprowadź wartość
App=limited_dop_application. To powoduje, że SSMS używalimited_dop_applicationjako nazwy aplikacji podczas łączenia się z wystąpieniem.Wybierz pozycję Połącz, aby otworzyć nowe połączenie.
W tym samym oknie zapytania wykonaj następujące zapytanie:
SELECT s.program_name AS application_name, wg.name AS workload_group_name, wg.max_dop FROM sys.dm_exec_sessions AS s INNER JOIN sys.resource_governor_workload_groups AS wg ON s.group_id = wg.group_id WHERE s.session_id = @@SPID;Powinny zostać wyświetlone następujące dane wyjściowe pokazujące, że sesja została sklasyfikowana w
limit_dopgrupie obciążeń z maksymalną wartością DOP ustawioną na cztery:application_name workload_group_name max_dop ---------------- ------------------- ------- limited_dop_application limit_dop 4Powtórz powyższe kroki, ale nie wpisuj niczego w polu na karcie Dodatkowe parametry połączenia. Wynik zmieni się, tak że będą wyświetlane domyślna nazwa aplikacji SSMS oraz grupa obciążeń
defaultz domyślną wartością0dla maksymalnego stopnia równoległości.application_name workload_group_name max_dop ---------------- ------------------- ------- Microsoft SQL Server Management Studio - Query default 0
Aby przywrócić początkową konfigurację tego przykładu, odłącz wszystkie sesje przy użyciu
limit_dopgrupy obciążeń i wykonaj następujący skrypt języka T-SQL. Skrypt zawiera następujące kroki:- Wyłącz zarządcę zasobów, aby można było porzucić funkcję klasyfikatora.
- Usuń grupę obciążeń. Wymaga to, aby żadna sesja nie korzystała z tej grupy obciążeń.
- Skonfiguruj ponownie zarządcę zasobów, aby ponownie załadować efektywną konfigurację bez funkcji klasyfikatora i grupy obciążeń. Umożliwia to zarządcę zasobów.
- Wyłącz zarządcę zasobów, aby przywrócić początkową konfigurację.
/* Disable resource governor so that the classifier function can be dropped. */ ALTER RESOURCE GOVERNOR DISABLE; ALTER RESOURCE GOVERNOR WITH (CLASSIFIER_FUNCTION = NULL); DROP FUNCTION IF EXISTS dbo.rg_classifier; /* Drop the workload group. This requires that no sessions are using this workload group. */ DROP WORKLOAD GROUP limit_dop; /* Reconfigure resource governor to reload the effective configuration without the classifier function and the workload group. This enables resource governor. */ ALTER RESOURCE GOVERNOR RECONFIGURE; /* Disable resource governor to revert to the initial configuration. */ ALTER RESOURCE GOVERNOR DISABLE;
Używanie wielu pul zasobów i grup obciążeń
W tym przykładzie użyto zarządcy zasobów do klasyfikowania sesji z aplikacji przetwarzania zamówień do różnych grup obciążeń i pul zasobów w zależności od pory dnia. Ta konfiguracja przydziela więcej zasobów do aplikacji w godzinach szczytu przetwarzania i ogranicza zasoby poza godzinami pracy. W przykładzie przyjęto założenie, że aplikacja nie używa długotrwałych sesji.
Utwórz dwie pule zasobów na potrzeby przetwarzania godzin szczytu i godzin wolnych.
- Pula
peak_hours_poolgwarantuje (rezerwuje) co najmniej 20% średniej przepustowości procesora za pomocąMIN_CPU_PERCENTi nie ogranicza przepustowości procesora przez ustawienieMAX_CPU_PERCENTna100. - Pula
off_hours_poolnie rezerwuje żadnej przepustowości procesora przez ustawienieMIN_CPU_PERCENTna0, ale ogranicza przepustowość procesora do 50%, gdy występuje rywalizacja o zasoby procesora, przez ustawienieMAX_CPU_PERCENTna50.
CREATE RESOURCE POOL peak_hours_pool WITH ( MIN_CPU_PERCENT = 20, MAX_CPU_PERCENT = 100 ); CREATE RESOURCE POOL off_hours_pool WITH ( MIN_CPU_PERCENT = 0, MAX_CPU_PERCENT = 50 );Pule zasobów mogą rezerwować i ograniczać zasoby systemowe, takie jak procesor, pamięć i we/wy. Aby uzyskać więcej informacji, zobacz CREATE RESOURCE POOL.
- Pula
Utwórz dwie grupy obciążeń, po jednym dla każdej puli zasobów.
- Parametr
peak_hours_groupnie ogranicza liczby współbieżnych żądań przez ustawienieGROUP_MAX_REQUESTSwartości domyślnej .0 -
off_hours_groupogranicza liczbę współbieżnych żądań we wszystkich sesjach sklasyfikowanych do tej grupy przez ustawienie parametruGROUP_MAX_REQUESTSna200.
CREATE WORKLOAD GROUP peak_hours_group WITH ( GROUP_MAX_REQUESTS = 0 ) USING peak_hours_pool; CREATE WORKLOAD GROUP off_hours_group WITH ( GROUP_MAX_REQUESTS = 200 ) USING off_hours_pool;Grupy obciążeń definiują zasady, takie jak maksymalna liczba żądań, maksymalny stopień równoległości i maksymalny rozmiar przydziału pamięci. Aby uzyskać więcej informacji, zobacz CREATE WORKLOAD GROUP.
- Parametr
Utwórz i wypełnij tabelę, która definiuje interwały czasu szczytu i godzin wolnych.
- Każdy wiersz w tabeli definiuje godzinę rozpoczęcia i zakończenia interwału oraz nazwę grupy obciążeń do użycia w interwale.
- Czas rozpoczęcia i zakończenia każdego interwału jest włącznie.
- Tabela jest tworzona w
masterbazie danych, aby mogła być używana w funkcji klasyfikatora powiązanego ze schematem.
USE master; GO CREATE TABLE dbo.workload_interval ( workload_group_name sysname NOT NULL, start_time time(7) NOT NULL, end_time time(7) NOT NULL, CONSTRAINT pk_workload_interval PRIMARY KEY (start_time, workload_group_name), CONSTRAINT ak_workload_interval_1 UNIQUE (end_time, workload_group_name), CONSTRAINT ck_workload_interval_1 CHECK (start_time < end_time) ); GO INSERT INTO dbo.workload_interval VALUES (N'off_hours_group', '00:00', '06:29:59.9999999'), (N'peak_hours_group', '06:30', '18:29:59.9999999'), (N'off_hours_group', '18:30', '23:59:59.9999999');Utwórz funkcję klasyfikatora.
- Dane w tabeli powinny zawierać jeden pasujący wiersz dla danej pory dnia. Jeśli dane naruszają tę regułę, funkcja zwraca
defaultwartość jako nazwę grupy obciążeń. - Poniższa przykładowa funkcja zwraca
defaultrównież, jeśli nazwa aplikacji zwrócona przez wbudowaną funkcję APP_NAME() jest niczym innym niżorder_processing.
USE master; GO CREATE OR ALTER FUNCTION dbo.rg_classifier() RETURNS sysname WITH SCHEMABINDING AS BEGIN DECLARE @WorkloadGroupName sysname = N'default'; SELECT @WorkloadGroupName = workload_group_name FROM dbo.workload_interval WHERE APP_NAME() = N'order_processing' AND CAST(GETDATE() AS time(7)) BETWEEN start_time AND end_time; IF @@ROWCOUNT > 1 SELECT @WorkloadGroupName = N'default'; RETURN @WorkloadGroupName; END; GO- Dane w tabeli powinny zawierać jeden pasujący wiersz dla danej pory dnia. Jeśli dane naruszają tę regułę, funkcja zwraca
Jest to krok opcjonalny. Zamiast tworzyć tabelę w
masterbazie danych, można użyć konstruktora wartości tabeli do zdefiniowania interwałów czasu bezpośrednio w funkcji klasyfikatora. Jest to zalecane podejście, gdy rozmiar danych jest mały, a kryteria funkcji klasyfikatora nie są często zmieniane. Oto przykład tego samego klasyfikatora wykorzystującego konstruktor tabelaryczny zamiast tabeli wmaster.USE master; GO CREATE OR ALTER FUNCTION dbo.rg_classifier() RETURNS sysname WITH SCHEMABINDING AS BEGIN DECLARE @WorkloadGroupName sysname = N'default'; SELECT @WorkloadGroupName = workload_group_name FROM ( VALUES (CAST(N'off_hours_group' AS sysname), CAST('00:00' AS time(7)), CAST('06:29:59.9999999' AS time(7))), (CAST(N'peak_hours_group' AS sysname), CAST('06:30' AS time(7)), CAST('18:29:59.9999999' AS time(7))), (CAST(N'off_hours_group' AS sysname), CAST('18:30' AS time(7)), CAST('23:59:59.9999999'AS time(7))) ) AS wg (workload_group_name, start_time, end_time) WHERE APP_NAME() = N'order_processing' AND CAST(GETDATE() AS time(7)) BETWEEN start_time AND end_time; IF @@ROWCOUNT > 1 SELECT @WorkloadGroupName = N'default'; RETURN @WorkloadGroupName; END; GOZmodyfikuj konfigurację zarządcy zasobów, aby nasza konfiguracja stanie się skuteczna i włączyć zarządcę zasobów.
ALTER RESOURCE GOVERNOR WITH (CLASSIFIER_FUNCTION = dbo.rg_classifier); ALTER RESOURCE GOVERNOR RECONFIGURE;Sprawdź, czy zarządca zasobów jest włączony, używa określonej funkcji klasyfikatora i czy funkcja klasyfikatora działa zgodnie z oczekiwaniami, wykonując podobne kroki, jak w poprzednim przykładzie. Tym razem wprowadzamy
App=order_processingna karcie Dodatkowe parametry połączenia w oknie dialogowym Łączenie programu SSMS, aby dopasować nazwę aplikacji do funkcji klasyfikatora. Wykonaj następujące zapytanie, aby określić nazwę aplikacji, grupę obciążeń, pulę zasobów oraz rezerwację procesora CPU i limit dla bieżącej sesji:SELECT s.program_name AS application_name, wg.name AS workload_group_name, wg.group_max_requests, rp.name AS resource_pool_name, rp.min_cpu_percent, rp.max_cpu_percent FROM sys.dm_exec_sessions AS s INNER JOIN sys.resource_governor_workload_groups AS wg ON s.group_id = wg.group_id INNER JOIN sys.resource_governor_resource_pools AS rp ON wg.pool_id = rp.pool_id WHERE s.session_id = @@SPID;Wyniki zależą od godziny dnia. Jeśli na przykład bieżąca godzina to 14:30, wynik pokazuje, że
peak_hours_groupipeak_hours_poolsą używane:application_name workload_group_name group_max_requests resource_pool_name min_cpu_percent max_cpu_percent ----------------- -------------------- ------------------ ------------------- --------------- --------------- order_processing peak_hours_group 0 peak_hours_pool 20 100Aby przywrócić początkową konfigurację tego przykładu, odłącz wszystkie sesje przy użyciu
peak_hours_groupgrup obciążeń ioff_hours_groupi wykonaj następujący skrypt języka T-SQL. Skrypt zawiera następujące kroki:- Wyłącz zarządcę zasobów, aby można było porzucić funkcję klasyfikatora.
- Usuń grupy obciążeń. Wymaga to, aby żadne sesje nie używały tych grup obciążeń.
- Po usunięciu grup obciążeń usuń pule zasobów.
- Skonfiguruj ponownie zarządcę zasobów, aby ponownie załadować efektywną konfigurację bez funkcji klasyfikatora i grup obciążeń zdefiniowanych przez użytkownika i pul zasobów. Umożliwia to zarządcę zasobów.
- Wyłącz zarządcę zasobów, aby przywrócić początkową konfigurację.
/* Disable resource governor so that the classifier function can be dropped. */ ALTER RESOURCE GOVERNOR DISABLE; ALTER RESOURCE GOVERNOR WITH (CLASSIFIER_FUNCTION = NULL); DROP FUNCTION IF EXISTS dbo.rg_classifier; DROP TABLE IF EXISTS dbo.workload_interval; /* Drop the workload groups. This requires that no sessions are using these workload groups. */ DROP WORKLOAD GROUP peak_hours_group; DROP WORKLOAD GROUP off_hours_group; /* Once the workload groups are dropped, drop the resource pools. */ DROP RESOURCE POOL peak_hours_pool; DROP RESOURCE POOL off_hours_pool; /* Reconfigure resource governor to reload the effective configuration without the classifier function and user-defined workload groups and resource pools. This enables resource governor. */ ALTER RESOURCE GOVERNOR RECONFIGURE; /* Disable resource governor to revert to the initial configuration. */ ALTER RESOURCE GOVERNOR DISABLE;
Monitorowanie zarządcy zasobów przy użyciu widoków systemowych
Przykładowe zapytania w tej sekcji pokazują, jak można monitorować statystyki i zachowanie zarządcy zasobów.
Statystyki zarządcy zasobów są skumulowane od czasu ostatniego ponownego uruchomienia serwera. Jeśli musisz zebrać statystyki począwszy od określonego czasu, możesz zresetować statystyki przy użyciu instrukcji ALTER RESOURCE GOVERNOR RESET STATISTICS .
Statystyki środowiska uruchomieniowego puli zasobów
Dla każdej puli zasobów zarządca zasobów śledzi wykorzystanie procesora i pamięci, zdarzenia związane z brakiem pamięci, przydziały pamięci, operacje we/wy i inne statystyki. Więcej informacji można znaleźć w sys.dm_resource_governor_resource_pools.
Następujące zapytanie zwraca podzbiór dostępnych statystyk dla wszystkich pul zasobów:
SELECT rp.pool_id,
rp.name AS resource_pool_name,
wg.workload_group_count,
rp.statistics_start_time,
rp.total_cpu_usage_ms,
rp.target_memory_kb,
rp.used_memory_kb,
rp.out_of_memory_count,
rp.active_memgrant_count,
rp.total_memgrant_count,
rp.total_memgrant_timeout_count,
rp.read_io_completed_total,
rp.write_io_completed_total,
rp.read_bytes_total,
rp.write_bytes_total,
rp.read_io_stall_total_ms,
rp.write_io_stall_total_ms
FROM sys.dm_resource_governor_resource_pools AS rp
OUTER APPLY (
SELECT COUNT(1) AS workload_group_count
FROM sys.dm_resource_governor_workload_groups AS wg
WHERE wg.pool_id = rp.pool_id
) AS wg;
Statystyki czasu wykonywania grupy obciążeń
Dla każdej grupy obciążeń zarządca zasobów śledzi czas procesora CPU, liczbę żądań, zablokowane zadania, czas oczekiwania na blokadę, optymalizacje zapytań i inne statystyki. Aby uzyskać więcej informacji, zobacz sys.resource_governor_workload_groups.
Następujące zapytanie zwraca podzestaw dostępnych statystyk dla wszystkich grup obciążeń:
SELECT wg.name AS workload_group_name,
rp.name AS resource_pool_name,
wg.statistics_start_time,
wg.total_request_count,
wg.total_cpu_usage_ms,
wg.blocked_task_count,
wg.total_lock_wait_time_ms,
wg.total_query_optimization_count,
wg.max_request_grant_memory_kb,
wg.active_parallel_thread_count,
wg.effective_max_dop,
wg.request_max_memory_grant_percent_numeric
FROM sys.dm_resource_governor_workload_groups AS wg
INNER JOIN sys.dm_resource_governor_resource_pools AS rp
ON wg.pool_id = rp.pool_id
Agregowanie sesji według atrybutów grupy obciążeń i sesji
Poniższe zapytanie zwraca dystrybucję sesji między grupami obciążeń i agregują statystyki sesji dla każdej grupy obciążeń.
Duża liczba sesji ze stanem preconnect może wskazywać na spowolnienie wykonywania klasyfikatora.
SELECT wg.name AS workload_group_name,
rp.name AS resource_pool_name,
s.program_name AS application_name,
s.login_name,
s.host_name,
s.status,
d.name AS database_name,
MIN(s.login_time) AS first_login_time,
MAX(s.login_time) AS last_login_time,
MAX(s.last_request_start_time) AS last_request_start_time,
COUNT(1) AS session_count
FROM sys.dm_exec_sessions AS s
INNER JOIN sys.dm_resource_governor_workload_groups AS wg
ON s.group_id = wg.group_id
INNER JOIN sys.dm_resource_governor_resource_pools AS rp
ON wg.pool_id = rp.pool_id
INNER JOIN sys.databases AS d
ON s.database_id = d.database_id
GROUP BY wg.name,
rp.name,
s.program_name,
s.login_name,
s.host_name,
s.status,
d.name;
Agregowanie żądań według grupy obciążeń i atrybutów żądania
Następujące zapytanie zwraca rozkład żądań między grupami obciążeń i agreguje statystyki żądań dla każdej grupy obciążeń:
SELECT wg.name AS workload_group_name,
rp.name AS resource_pool_name,
r.command,
r.status,
d.name AS database_name,
COUNT(1) AS request_count,
MIN(r.start_time) AS first_request_start_time,
MAX(r.start_time) AS last_request_start_time,
SUM(CAST(r.total_elapsed_time AS bigint)) AS total_elapsed_time_ms
FROM sys.dm_exec_requests AS r
INNER JOIN sys.dm_resource_governor_workload_groups AS wg
ON r.group_id = wg.group_id
INNER JOIN sys.dm_resource_governor_resource_pools AS rp
ON wg.pool_id = rp.pool_id
INNER JOIN sys.databases AS d
ON r.database_id = d.database_id
GROUP BY wg.name,
rp.name,
r.command,
r.status,
d.name;
Najlepsze praktyki dotyczące zarządcy zasobów
Skonfiguruj dedykowane połączenie administratora (DAC) i dowiedz się, jak z niego korzystać. Aby uzyskać więcej informacji, zobacz Połączenie diagnostyczne dla administratorów bazy danych. Jeśli konfiguracja zarządcy zasobów nie działa, możesz użyć funkcji DAC, aby rozwiązać ten problem lub wyłączyć zarządcę zasobów.
Podczas konfigurowania pul zasobów należy zachować ostrożność przy określaniu dużych wartości dla
MIN_CPU_PERCENT,MIN_MEMORY_PERCENTiMIN_IOPS_PER_VOLUME. Ustawienie konfiguracjiMINrezerwuje zasoby dla puli zasobów i sprawia, że są one niedostępne dla innych pul zasobów, w tym pulidefault. Aby uzyskać więcej informacji, zobacz Tworzenie puli zasobów.Podobnie należy zachować ostrożność przy określaniu bardzo małych wartości parametrów
MAX_CPU_PERCENTiCAP_CPU_PERCENTlub przy ustawianiu parametruMAX_IOPS_PER_VOLUMEna wartość znacznie mniejszą, niż może zapewnić podsystem we/wy. Silnie ograniczone obciążenie korzystające z zasobów udostępnionych może mieć wpływ na inne obciążenia przy użyciu tych samych zasobów. Na przykład zapytanie ograniczane wydajnością CPU może utrzymywać blokady przez dłuższy czas i powodować długie łańcuchy blokowania. Obciążenie ograniczone przez operacje we/wy może dłużej utrzymywać zatrzaski na współdzielonych stronach systemowych, co skutkuje przekroczeniem limitu czasu oczekiwania na zatrzaski w przypadku innych obciążeń.Funkcja klasyfikatora wydłuża czas przetwarzania logowania. Unikaj złożonej logiki oraz długotrwałych lub zasobochłonnych zapytań w klasyfikatorze, zwłaszcza jeśli odwołują się one do dużych tabel. Nadmiernie złożona funkcja może powodować opóźnienia logowania lub przekroczenia limitu czasu połączenia.
Jeśli musisz użyć tabeli w klasyfikatorze, a tabela jest mała i głównie statyczna, rozważ użycie konstruktora wartości tabeli , jak pokazano we wcześniejszej części tego artykułu.
Unikaj używania często modyfikowanej tabeli w klasyfikatorze. Zwiększa to ryzyko blokowania, które może opóźnić logowanie i spowodować przekroczenie limitu czasu połączenia. Następujące obejścia mogą ograniczyć ryzyko, jednak mają wady, w tym ryzyko nieprawidłowej klasyfikacji:
- Rozważ użycie wskazówki tabeli
NOLOCKlub równoważnej wskazówkiREADUNCOMMITTED. Aby uzyskać więcej informacji, zobacz READUNCOMMITTED. - Rozważ użycie
LOCK_TIMEOUTustawienia na początku funkcji klasyfikatora, ustawiając ją na niską wartość, taką jak 1000 milisekund. Aby uzyskać więcej informacji, zobacz SET LOCK_TIMEOUT.
- Rozważ użycie wskazówki tabeli
Wykonanie polecenia
ALTER RESOURCE GOVERNOR RECONFIGUREpo usunięciu nieużywanej puli zasobów na maszynie z dużą ilością pamięci może zająć dużo czasu. Jeśli funkcja klasyfikująca obowiązuje, zanim rozpocznie się rekonfiguracja, nowe próby nawiązania połączenia podejmowane w tym czasie mogą zakończyć się przekroczeniem limitu czasu.Jeśli usuniesz nieużywaną pulę zasobów, zalecamy ponowne skonfigurowanie zarządcy zasobów w oknie obsługi lub okresie niskiej aktywności.
Nie można zmodyfikować funkcji klasyfikatora, gdy jest ona przywołyowana w konfiguracji zarządcy zasobów. Można jednak zmodyfikować konfigurację tak, aby korzystała z innej funkcji klasyfikatora. Jeśli chcesz wprowadzić zmiany w klasyfikatorze, rozważ utworzenie pary funkcji klasyfikatora. Możesz na przykład utworzyć elementy
dbo.rg_classifier_A()idbo.rg_classifier_B(). Jeśli wymagana jest zmiana logiki klasyfikatora, wykonaj następujące kroki:- Użyj instrukcji ALTER FUNCTION , aby wprowadzić zmiany w funkcji , która nie jest obecnie używana w konfiguracji zarządcy zasobów.
- Użyj instrukcji ALTER RESOURCE GOVERNOR , aby uaktywnić zmodyfikowany klasyfikator, a następnie ponownie skonfigurować zarządcę zasobów. Przykład:
ALTER RESOURCE GOVERNOR WITH (CLASSIFIER_FUNCTION = dbo.rg_classifier_B); ALTER RESOURCE GOVERNOR RECONFIGURE; - Jeśli konieczna jest zmiana ponownie, wykonaj te same kroki, korzystając z innej funkcji (
dbo.rg_classifier_A()).
Konfiguracja zarządcy zasobów jest przechowywana w
masterbazie danych. Pamiętaj, aby okresowo tworzyć kopie zapasowemasteri wiedzieć, jak je przywrócić. Aby uzyskać więcej informacji, zobacz Tworzenie kopii zapasowych i przywracanie: systemowe bazy danych. Ponieważ istnieją ograniczenia dotyczące przywracaniamaster, zalecamy również osobne zapisanie kopii skryptów konfiguracji zarządcy zasobów. Konfigurację zarządcy zasobów można utworzyć ponownie za pomocą skryptów, jeślimasterbaza danych musi zostać ponownie skompilowana.
Treści powiązane
- Zarządca zasobów
- Włącz zarządcę zasobów
- pula zasobów zarządcy zasobów
- grupa robocza zarządzania zasobami
- Konfigurowanie zarządcy zasobów przy użyciu szablonu
- Wyświetlanie i modyfikowanie właściwości zarządcy zasobów
- ALTER RESOURCE GOVERNOR (Transact-SQL)
- CREATE RESOURCE POOL (Transact-SQL)
- CREATE WORKLOAD GROUP (Transact-SQL)
- CREATE FUNCTION (Transact-SQL)