SQL Server-resources beheren
Hoewel sommige SQL-servers of door Azure SQL beheerde exemplaren zijn toegewezen aan de databases van één toepassing, wordt een configuratie vaak gezien in bedrijfskritieke toepassingen, veel servers ondersteunen databases voor meerdere toepassingen met verschillende prestatievereisten en piekworkloadcycli. Het kan lastig zijn om deze verschillende vereisten te verdelen voor beheerders. Een effectieve manier om serverresources te beheren is door Resource Governor te gebruiken, geïntroduceerd in SQL Server 2008.
Resource Governor is een functie in SQL Server- en Azure SQL Managed Instances die gedetailleerde controle over CPU-, fysieke I/O- en geheugenresources mogelijk maken voor binnenkomende toepassingsaanvragen. Wanneer resource governor is ingeschakeld op instantieniveau, gebruikt resource governor een classificatiefunctie om te definiëren hoe verbindingen worden behandeld, waarbij sessies worden onderverdeeld in workloadgroepen. Elke workloadgroep is geconfigureerd voor het gebruik van een specifieke groep systeemresources.
Resourcegroepen
Een resourcegroep vertegenwoordigt de fysieke resources die beschikbaar zijn op de server. SQL Server heeft altijd twee pools: standaard en intern, zelfs als Resource Governor niet is ingeschakeld. De interne pool is gereserveerd voor kritieke SQL Server-functies en kan niet worden beperkt. De standaardgroep, samen met alle resourcegroepen die u expliciet definieert, kan worden geconfigureerd met limieten voor de resources die ze kunnen gebruiken. Voor elke niet-interne pool kunt u de volgende limieten opgeven:
- Min/max CPU-percentage
- Limiet van CPU-percentage
- Min/max geheugenpercentage
- NUMA-knooppuntaffiniteit
- Minimum/maximum aantal IOPS per volume
Notitie
Wijzigingen in een resourcegroep hebben alleen invloed op nieuwe sessies, niet op sessies die al worden uitgevoerd. Het wijzigen van een pool beperkt daarom niet de resources van een langlopend proces. De uitzondering op deze regel zijn externe pools die worden gebruikt met SQL Server Machine Learning Services, die kunnen worden beperkt door een poolwijziging, zelfs voor lopende sessies.
Alle resourcegroepinstellingen, met uitzondering van het minimale en maximale CPU-percentage, vertegenwoordigen vaste limieten die niet kunnen worden overschreden. Het minimale/maximale CPU-percentage is alleen van toepassing wanneer er sprake is van CPU-conflicten. Als u bijvoorbeeld maximaal 70%instelt, kan de workload maximaal 100% beschikbare CPU-cycli gebruiken wanneer er geen conflicten zijn. Als er echter andere workloads worden uitgevoerd, is de workload beperkt tot 70%.
Werkbelastinggroep
Een workloadgroep fungeert als een container voor sessieaanvragen, geclassificeerd door de classificatiefunctie. Net als bij resourcegroepen zijn er twee ingebouwde groepen: standaard en intern. Elke workloadgroep is gekoppeld aan één resourcegroep, maar een resourcegroep kan meerdere workloadgroepen hosten. Standaard worden alle verbindingen omgeleid naar de standaardwerkbelastinggroep, tenzij de classificatiefunctie deze toewijst aan een door de gebruiker gedefinieerde groep. De standaardwerkbelastinggroep maakt gebruik van de resources die zijn toegewezen aan de standaardresourcegroep.
Classificatiefunctie
De classificatiefunctie wordt uitgevoerd op het moment dat er een verbinding tot stand is gebracht met het SQL Server-exemplaar en classificeert elke verbinding in een bepaalde workloadgroep. Als de functie een NULL, standaardwaarde of de naam van de niet-bestaande workloadgroep retourneert, wordt de sessie overgebracht naar de standaardwerkbelastinggroep. Omdat de classificatie bij elke verbinding wordt uitgevoerd, moet deze worden getest op efficiëntie. In de volgende afbeelding ziet u een voorbeeldclassificatiefunctie die gebruikers classificeert op basis van hun gebruikersnaam.
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
U kunt de complexiteit van de functiedefinitie in het voorbeeld vergroten, maar u moet controleren of de complexere functie geen invloed heeft op de gebruikersprestaties.
Resource Governor-gebruiksvoorbeelden
Resource Governor wordt voornamelijk gebruikt in scenario's met meerdere tenants waarbij een groep databases één SQL Server-exemplaar delen en de prestaties consistent moeten worden gehouden voor alle gebruikers van de server. U kunt Resource Governor ook gebruiken om de resources te beperken die worden gebruikt door onderhoudsbewerkingen, zoals consistentiecontroles en het opnieuw opbouwen van indexen, om te proberen voldoende resources te garanderen voor gebruikersquery's tijdens uw onderhoudsvensters.