Resource Governor är en funktion i SQL Server som kan hantera hur mycket systemresurser olika laster får lov att använda och hur. Det går att begränsa/övervaka/prioritera den mängd CPU och minne som en specifik last får använda på en instans.
I tidigare delar av denna serie har jag lite snabbt gått igenom vad Resource Governorn kan göra och hur man sätter upp den:
Resource Governor del 1
Resource Governor del 2
Men när den väl är konfigurerad vill kan det vara bra att kunna följa upp hur den satts upp och hur den används.
För att se hur Resource Governorn är konfigurerad har SQL Server tre inbyggda dynamic management vyer för detta:
sys.dm_resource_governor_resource_pools
- Visar information om hur de olika resurspoolerna används samt statistik för dessa.
sys.dm_resource_governor_workload_groups
- Visar statistik om workload group och den konfiguration som för tillfället används.
sys.dm_resource_governor_configuration
- Visar id för den classifier funktion som används samt om den nuvarande konfigurationen är uppläst till minnet och används av Resource Governor. Annars krävs en omstart eller att RECONFIGURE satsen för Resource Governorn körs.
SELECT name,
min_cpu_percent,
max_cpu_percent,
min_memory_percent,
max_memory_percent,
max_memory_kb,
used_memory_kb,
target_memory_kb,
FROM sys.dm_resource_governor_resource_pools;
Samma vy ger även indikationer på om konfigurationen av resurspoolen är rätt eller om något bör ändras.
SELECT name,
total_memgrant_timeout_count,
out_of_memory_count,
memgrant_waiter_count
FROM sys.dm_resource_governor_resource_pools;
total_memgrant_timeout_count
- Räknare som visar alla anrop som har timat ut i väntan på minnestilldelning. Indikerar att resurspoolen kan ha för lite minne tilldelat.
out_of_memory_count
– Visar antalet frågor som har fallerat pga. för lite tillgängligt minne. Kontrollera om MAX_MEMORY_PERCENT bör höjas eller om det går att skriva om frågorna så att de är mindre minnesintensiva. Det även kan bero på att det är för lite minne på hela instansen så det är inte säkert att det hjälper att höja MAX_MEMORY_PERCENT.
memgrant_waiter_count
– Visar i realtid hur många anslutningar i resurspoolen som väntar på minne. Om det är många visar det på att resurspoolen har för lite minne tilldelat.
sys.dm_resource_governor_workload_groups
- Innehåller information och statistik för de anrop som kommit för de olika workloadgrupperna.
SELECT
name,
active_request_count,
total_request_count,
total_suboptimal_plan_generation_count,
total_reduced_memgrant_count
FROM sys.dm_resource_governor_workload_groups
active_request_count
– Ger det nuvarande antalet anrop för respektive grupp.
total_request_count
– Det kumulativa antalet anrop för respektive grupp.
total_suboptimal_plan_generation_count
– Visar hur många gånger instansen har använt en sämre query plan pga. workload inställningar och/eller minnesbrist. Är det ett stort antal bör frågorna anpassas eller MAX_MEMORY_PERCENT inställningen revideras.
total_reduced_memgrant_count
– Visar hur många gånger en fråga inte kunnat få så mycket minne som den beräknat att den behöver. Ofta leder detta till ökat CPU användande och/eller att användningen av tempdb ökar. Även för denna bör minnesinställningarna och frågorna kontrolleras. Det kan även indikera på att servern i sig har för lite minne.
Det finns även ett antal andra DMV:er som relaterar till Resource Governorn som kan vara bra att känna till. T ex visar sys.dm_exec_session vilken resursgrupp som respektive anrop tillhör i kolumnen group_id. I sys.dm_exec_cached_plans visas vilka resurspooler som respektive cachad query plan använder.
Det finns mycket mer att hämta från ovan DMV:er beroende på vilka inställningar som är gjorda men för de enkla exempel vi hittills har gjort är ovan en bra start. Resource Governor är en kraftfull funktion i SQL Server som vi säkert får tillfälle att återkomma till och djupa ner oss i.
/Björn