| Resource Governor – informacje podstawowe | |
| Resource Governor – laboratorium | |
| Resource Governor – referencje |
Funcjonalność Resource Governor pozwala administratorom baz danych określać limity zasobów (pamięci i czasu procesora) dla określonych akcji i działań (workloads), takich jak zapytania, zapytania ad-hoc, zadania administracyjne, raporty, itd. co powoduje możliwość zaplanowania odpowiednio wysokiej wydajności systemu dla końcowego użytkownika. Resource Governor pozwala także nałożyć priorytety na zasoby i łączyć je z określonym użytkownikiem czy grupami użytkowników.
Mając do dyspozycji takie narzędzie jak Resource Governor administrator baz danych jest w stanie odpowiednio zaplanować zadania, aby wykonywały się nie tylko o odpowiednim czasie, ale również wykorzystywały pamięć i czas procesora przydzielone przez tego administratora. Można przydzielić duże zasoby dla wykonania raportów oraz nadać im duży priorytet, dzięki czemu mając pewność, że ten proces wykona się w odpowiednio szybko. Z kolei pewne zadania administracyjne, takie jak wykonywanie kopii zapasowej bazy danych, mogą otrzymać niski priorytet i niedużą porcję zasobów nie powodując zmniejszenia wydajności systemu.
Administrator może określać takie parametry serwera, jak:
• maksymalny % zużycia procesora
• minimalny % zużycia procesora
• maksymalny % zużycia pamięci
• minimalny % zużycia pamięci
Praca z funkcjonalnością Resource Governor polega na określeniu tzw. pul zasobów (resource pools), w których określone są limity dolne i górne przydziału pamięci oraz procesora. Następnie należy zdefiniować grupy (workload groups), które zostają przydzielone do utworzonych wcześniej pul. Ostatnim krokiem jest utworzenie skalarnej funkcji klasyfikującej zapytania (czy każdą inną aktywność) do odpowiednich grup. Funkcja zwraca nazwę grupy na podstawie dowolnych kryteriów (powiązanych oczywiście z procesem biznesowym, wiedzą administratora baz danych, porą dnia, itd.)
Celem ćwiczenia jest stworzenie zasad przydziału zasobów w zależności od nazwy użytkownika lub używanej aplikacji. Drugim zadaniem będzie skonfigurowanie monitora wydajności (PerformanceMonitor) tak, aby obserwował odpowiednie liczniki systemowe odpowiedzialne za funkcjonalność Resource Governor.
1. Uruchom SQL Server Management Studio (SSMS) i połącz się z serwerem EVALUATION używając uwierzytelnienia WINDOWS.

2. Przejdź do folderu Management i rozwiń folder Resource Governor. Zauważ, że domyślnie ta funkcjonalność jest wyłączona. SQL Server 2008 posiada wbudowane dwie systemowe pule zasobów nazywane default oraz internal, które nie mogą być modyfikowane. Służą one między innymi do obsługi takich procesów systemowych jak proces opóźnionego zapisu (lazy writer) czy proces śledzenia (trace).

3. W następnym kroku należy utworzyć i skonfigurować nową pulę zasobów. Można to wykonać na dwa sposoby: za pomocą SSMS lub używając skryptu T-SQL. Dla utworzenia nowej puli zasobów w SQL Server Management Studio należy zaznaczyć katalog Resource Pools oraz z menu kontekstowego wybrać opcję New resource pool. W oknie właściwości należy najpierw zaznaczyć, iż Resource Governor będzie włączony a następnie dodać pulę jak pokazano na rysunku poniżej:

4. Ten sam efekt można osiągnąć wykonując odpowiedni skrypt T-SQL. Tym razem zdefiniowana zostanie pula o nazwie LOW i parametrach, jak poniżej:
CREATE RESOURCE POOL LOW WITH ( MIN_CPU_PERCENT=0, MAX_CPU_PERCENT=10, MIN_MEMORY_PERCENT=5 ) GO
5. Każda pula zasobów powinna mieć zdefiniowaną grupę. Dodawanie, modyfikacja oraz usuwanie grupy może być przeprowadzone na dwa sposoby – omówione już przy okazji pracy nad pulami zasobów. W pierwszym podejściu zdefiniujemy grupę za pomocą SSMS. W tym celu należy zaznaczyć katalog Workload Groups znajdujący się pod interesującą nas pulą zasobów i z menu kontekstowego wybrać opcję New workload group:

6. W oknie własności należy zdefiniować takie parametry jak ilość obsługiwanych żądań, czas procesora oraz % udostępnionej pamięci, pamiętając, iż wskazanie wartości 0 oznacza ‘wszystko’ bądź ‘automatycznie’ (w ramach zdefiniowanej puli).

7. Podobny efekt można osiągnąć za pomocą wykonania skryptu T-SQL, który definiuje dwie grupy w ramach puli LOW.
CREATE WORKLOAD GROUP Group1Low WITH ( IMPORTANCE = High ) USING LOW GO CREATE WORKLOAD GROUP Group2Low WITH ( IMPORTANCE = Low, MAX_DOP=1, GROUP_MAX_REQUESTS=2 ) USING LOW GO
8. W następnym kroku należy zdefiniować funkcję klasyfikującą, pozwalającą przypisać akcje, zdarzenia, zapytania, które mają miejsce na serwerze do odpowiedniej grupy, a tym samym przydzielić im zasoby znajdujące się w puli, do której wybrana grupa należy. Funkcja klasyfikująca nie przyjmuje żadnych parametrów wejściowych i zwraca nazwę grupy, do której zostanie zakwalifikowane żądanie. W naszym przypadku funkcja klasyfikująca jest dosyć prosta – dla żądania pochodzącego z SSMS zostanie wybrana grupa Group1 (z puli HIGH); jeżeli żądanie zostanie wygenerowane przez użytkownika ReportsUser, to zostanie ono przypisane do grupy Group1Low z puli LOW itd. W rzeczywistości funkcja klasyfikująca będzie zapewne bardziej skomplikowana (chociaż rekomendacje mówią, iż powinna być prosta, ponieważ funkcja klasyfikująca będzie wywoływana dla każdego żądania na serwerze i proces klasyfikacji tegoż żądania może powodować pewne opóźnienia), ponieważ może zawierać informacje klasyfikacji żądań w zależności np. od pory dnia.
CREATE FUNCTION dbo.Classification() RETURNS sysname WITH SCHEMABINDING AS BEGIN DECLARE @Group as sysname IF UPPER(APP_NAME()) LIKE '%MANAGEMENT STUDIO%' SET @Group = 'Group1' IF SUSER_SNAME() = 'ReportsUser' SET @Group = 'Group1Low' IF SUSER_SNAME() = 'sa' SET @Group = 'Group2' RETURN @Group END GO
9. Ostatnim krokiem jest poinformowanie usługi Resource Governor, iż ma zastosować utworzoną właśnie funkcję klasyfikującą:
ALTER RESOURCE GOVERNOR WITH (CLASSIFIER_FUNCTION = dbo.Classification) ALTER RESOURCE GOVERNOR RECONFIGURE GO
10. Na zakończenie zadania wykonaj poniższe zapytania i sprawdź otrzymane wyniki.
| • | Pierwsze z zapytań wyświetla informacje o stanie pul, ich konfiguracji oraz dostarcza podstawowych statystyk SELECT * FROM sys.dm_resource_governor_resource_pools |
| • | Drugie zapytanie zwraca informacje o konfiguracji grup oraz ich powiązaniu do określonych pul zasobów SELECT * FROM sys.dm_resource_governor_workload_groups |
| • | Trzecie zapytanie pozwala otrzymac informacje o stanie usługi Resource Governor (włączona, zatrzymana) oraz o funkcji klasyfikującej SELECT * FROM sys.resource_governor_configuration |
| • | Czwarte zapytanie informuje o aktualnym stanie konfiguracji usługi. Jest to o tyle istotne zapytanie, iż w polu is_reconfiguraction_pending administrator otrzymuje informacje, czy usługa wymaga rekonfiguracji lub nawet restartu usługi SQL Server. Konieczność zmiany konfiguracji może być spowodowana zmianą puli zasobów lub grupy (dodanie nowych, aktualizacja bądź usunięcie istniejących obiektów wchodzących w skład Resource Governor) SELECT * FROM sys.dm_resource_governor_configuration |
1. Uruchom konsolę monitora wydajności (Performance Monitor)
2. Z paska narzędzi konsoli dodaj nowe liczniki, zawarte w obiekcie SQLServer:Resource Pool Stats
3. Wybierz licznik CPU usage %
4. Z listy instancji wybierz jedną bądź obydwie utworzone pule. Można również monitorować pule systemowe
5. Uruchom SSMS i połącz się do serwera EVALUATION używając loginu ReportsUser i uruchom skrypt znajdujący się na dysku: C:\SQLAdmin\ResGovernor\Queries.sql
6. Połącz się do serwera EVALUATION używając loginu sa i uruchom skrypt znajdujący się na dysku: C:\SQLAdmin\ResGovernor\Queries.sql
7. Połącz się do serwera EVALUATION używając uwierzytelniania Windows i uruchom skrypt znajdujący się na dysku: C:\SQLAdmin\ResGovernor\Queries.sql
8. Przy odpowiednio małej wartości Min Memory dla puli LOW może nawet przerwanie wykonania zapytania ze względu na brak możliwości alokacji wymaganych zasobów. Można w ramach tego zadania zmieniać konfigurację pul i grup i obserwować wpływ tych zmian na sposób wykonywania zapytań.
Dodatkowe informacje na temat Resorce Governor można znaleźć w internecie:
[1] Resource Governor Related Dynamic Management Views (Transact-SQL) - Books Online
[3] Managing SQL Server Workload and Resources
[4] Co nowego w silniku bazodanowym SQL Server 2008 November CTP
[5] SQL Server 2008 - Resource Governor Questions - blog PSS SQL Escalation Services team
| • |
![]() | Damian Widera, Project Manager & Team Lead (MCT, MCITP – DBA, MCSD.NET) |