Kontrollera SQL Server-resurser

Slutförd

Medan vissa SQL-servrar eller Azure SQL-hanterade instanser är dedikerade till ett enda programs databaser, en konfiguration som ofta ses i verksamhetskritiska program, stöder många servrar databaser för flera program med varierande prestandakrav och arbetsbelastningscykler med hög belastning. Det kan vara svårt för administratörer att balansera dessa olika krav. Ett effektivt sätt att hantera serverresurser är att använda Resource Governor, som introducerades i SQL Server 2008.

Resource Governor är en funktion i SQL Server- och Azure SQL-hanterade instanser som tillåter detaljerad kontroll över PROCESSOR-, fysisk I/O- och minnesresurser för inkommande programbegäranden. När den är aktiverad på instansnivå använder Resource Governor en klassificerarfunktion för att definiera hur anslutningar behandlas och dela upp sessioner i arbetsbelastningsgrupper. Varje arbetsbelastningsgrupp är konfigurerad för att använda en specifik pool med systemresurser.

Resurspooler

En resurspool representerar de fysiska resurser som är tillgängliga på servern. SQL Server har alltid två pooler: standard och intern, även om Resource Governor inte är aktiverat. Den interna poolen är reserverad för kritiska SQL Server-funktioner och kan inte begränsas. Standardpoolen, tillsammans med alla resurspooler som du uttryckligen definierar, kan konfigureras med begränsningar för de resurser som de kan använda. För varje icke-intern pool kan du ange följande gränser:

  • Min/Max CPU-procent
  • Tak för CPU-procent
  • Minsta/högsta minnesprocent
  • NUMA-nodtillhörighet
  • Min/Max IOPs per volym

Kommentar

Ändringar i en resurspool påverkar bara nya sessioner, inte de som redan pågår. Att ändra en pool begränsar därför inte resurserna i en tidskrävande process. Undantaget till den här regeln är externa pooler som används med SQL Server Machine Learning Services, som kan begränsas av en pooländring även för pågående sessioner.

Alla inställningar för resurspooler, förutom den lägsta och högsta CPU-procentandelen, representerar hårda gränser som inte kan överskridas. Min/max CPU-procentandelen gäller endast när det finns cpu-konkurrens. Om du till exempel anger högst 70%kan arbetsbelastningen använda upp till 100% tillgängliga CPU-cykler när det inte finns någon konkurrens. Men om andra arbetsbelastningar körs begränsas arbetsbelastningen till 70%.

Arbetsbelastningsgrupp

En arbetsbelastningsgrupp fungerar som en container för sessionsbegäranden som klassificeras av klassificerarens funktion. På samma sätt som resurspooler finns det två inbyggda grupper: standard och interna. Varje arbetsbelastningsgrupp är associerad med en enda resurspool, men en resurspool kan vara värd för flera arbetsbelastningsgrupper. Som standard dirigeras alla anslutningar till standardarbetsbelastningsgruppen om inte klassificeraren tilldelar dem till en användardefinierad grupp. Standardarbetsbelastningsgruppen använder de resurser som allokerats till standardresurspoolen.

Funktionen Klassificerare

Klassificerarfunktionen körs när en anslutning upprättas till SQL Server-instansen och klassificerar varje anslutning till en viss arbetsbelastningsgrupp. Om funktionen returnerar en NULL, standard eller namnet på den obefintliga arbetsbelastningsgruppen överförs sessionen till standardarbetsbelastningsgruppen. Eftersom klassificeraren körs vid varje anslutning bör den testas för effektivitet. Följande bild visar en exempelklassificerarefunktion som klassificerar användare baserat på deras användarnamn.

CREATE FUNCTION dbo.RGClassifier()
RETURNS SYSNAME
WITH SCHEMABINDING
AS
BEGIN
DECLARE @WorkloadGroup AS SYSNAME
IF(SUSER_NAME() = 'ReportUser')
    SET @WorkloadGroup = 'ReportServerGroup'

ELSE IF (SUSER_NAME() = 'PrimaryUser')
    SET @WorkloadGroup = 'PrimaryServerGroup'
ELSE
    SET @WorkloadGroup = 'default'

RETURN @WorkloadGroup
END

Du kan öka komplexiteten i funktionsdefinitionen som visas i exemplet, men du bör kontrollera att den mer komplexa funktionen inte påverkar användarens prestanda.

Användningsfall för Resource Governor

Resource Governor används främst i scenarier med flera klientorganisationer där en grupp databaser delar en enda SQL Server-instans och prestanda måste hållas konsekvent för alla användare av servern. Du kan också använda Resource Governor för att begränsa de resurser som används av underhållsåtgärder som konsekvenskontroller och återskapade index, för att försöka garantera tillräckliga resurser för användarfrågor under underhållsperioderna.