Resource governor-resourcegroep
van toepassing op:SQL ServerAzure SQL Managed Instance
In resource governor vertegenwoordigt een resourcegroep een subset van de fysieke resources van een database-engine-exemplaar. Met Resource Governor kunt u limieten opgeven voor de totale hoeveelheid CPU, fysieke IO en geheugen die toepassingsaanvragen in de resourcegroep kunnen gebruiken.
Elke resourcepool kan een of meer workloadgroepen bevatten. Wanneer een sessie wordt gemaakt, wordt deze geclassificeerd in een specifieke workloadgroep. Groepsbeleid voor workloads reguleert de verzoeken die op een sessie worden uitgevoerd. Aanvragen gebruiken de resources uit de onderliggende resourcepool.
Concepten van resourcegroepen
Een resourcegroep vertegenwoordigt de fysieke resources van de server, zoals CPU, geheugen en I/O. Afhankelijk van de configuratie kunnen resources in een resourcegroep worden gereserveerd of gedeeld met andere pools. De poolconfiguratie wordt gedefinieerd door een of meer van de volgende instellingen op te geven voor elk type resource (CPU, geheugen en fysieke I/O):
MIN_CPU_PERCENT en MAX_CPU_PERCENT
Deze instellingen definiëren de minimale en maximale gegarandeerde gemiddelde CPU-bandbreedte voor alle aanvragen in de resourcegroep wanneer er sprake is van CPU-conflicten.
MIN_CPU_PERCENT
is een reservering van CPU-bandbreedte voor de resourcegroep die niet kan worden gebruikt door andere pools wanneer conflicten aanwezig zijn.
MAX_CPU_PERCENT
is een zachte limiet voor CPU-bandbreedte in de groep. De limiet wordt alleen afgedwongen als er SPRAKE is van CPU-conflicten met andere pools.
Stel dat de afdelingen Verkoop en Marketing in een bedrijf hetzelfde SQL Server-exemplaar delen. De afdeling Verkoop heeft een CPU-intensieve workload met query's met hoge prioriteit. De marketingafdeling heeft ook een CPU-intensieve workload, maar heeft query's met een lagere prioriteit. Door een afzonderlijke resourcegroep voor elke afdeling te maken, kunt u een minimum CPU-percentage van 40 toewijzen voor de resourcegroep Verkoop en een maximum CPU-percentage van 30 voor de marketingresourcegroep. Deze configuratie zorgt ervoor dat de workload Verkoop de CPU-resources ontvangt die nodig zijn en de workload Marketing heeft geen invloed op de CPU-vereisten van de workload Verkoop.
Het maximale CPU-percentage is een opportunistisch maximum. Als er CPU-capaciteit beschikbaar is, gebruiken de aanvragen al deze capaciteit, tot 100 procent. De maximumwaarde is alleen van toepassing wanneer er conflicten zijn voor CPU-resources. Als in het vorige voorbeeld de workload Verkoop niet wordt uitgevoerd, kan de workload Marketing 100 procent van de CPU gebruiken, indien nodig.
CAP_CPU_PERCENT
De CAP_CPU_PERCENT
instelling is een vaste limiet voor de CPU-bandbreedte voor alle aanvragen in de resourcegroep. Workloads die zijn gekoppeld aan de pool kunnen cpu-capaciteit gebruiken boven de waarde van MAX_CPU_PERCENT
als deze beschikbaar is, maar niet boven de waarde van CAP_CPU_PERCENT
. Op basis van het voorbeeld in de vorige sectie gaan we ervan uit dat de marketingafdeling wordt gefactureerd voor het resourcegebruik. Ze willen voorspelbare facturering en willen niet meer dan 30 procent van de CPU betalen. Dit doel kan worden bereikt door CAP_CPU_PERCENT
in te stellen op 30 voor de resourcepool voor Marketing.
MIN_MEMORY_PERCENT en MAX_MEMORY_PERCENT
Deze instellingen zijn de minimale en maximale hoeveelheid geheugen die is gereserveerd voor de resourcegroep die niet kan worden gedeeld met andere resourcegroepen.
Als u een minimale geheugenwaarde instelt voor een pool, wordt het geheugen gereserveerd voor aanvragen die in deze resourcegroep worden uitgevoerd. Deze instelling verschilt van MIN_CPU_PERCENT
, omdat het gereserveerde geheugen mogelijk in de pool blijft, zelfs wanneer er geen aanvragen zijn in de workloadgroepen die behoren tot deze pool. Wees voorzichtig bij het gebruik van deze instelling omdat dit geheugen niet beschikbaar is voor gebruik door een andere groep, zelfs als er geen actieve aanvragen zijn. Als u een maximale geheugenwaarde instelt voor een pool, betekent dit dat wanneer aanvragen in deze pool worden uitgevoerd, ze nooit meer krijgen dan dit percentage van het totale geheugen.
Voor databases zonder tabellen die zijn geoptimaliseerd voor geheugen, is het geheugen dat wordt beheerd door MIN_MEMORY_PERCENT
en MAX_MEMORY_PERCENT
specifiek het geheugen van de querywerkruimte of het verlenen van geheugen. Het geheugen van de buffergroep (gegevens- en indexpagina's) wordt altijd gedeeld tussen alle resourcegroepen en is niet gereserveerd of beperkt door resource governor. Zie Overwegingen voor geheugentoewijzingvoor meer informatie over het toewijzen van geheugen voor query's. Zie Een database met Memory-Optimized tabellen binden aan een resourcegroepvoor meer informatie over het gebruik van resourcegroepen met tabellen die zijn geoptimaliseerd voor geheugen.
AFFINITEIT
Met deze instelling kunt u een resourcepool toewijzen aan een of meer schedulers of NUMA-knooppunten voor een betere isolatie van CPU-bronnen. Als u het scenario Verkoop en marketing uit eerdere secties wilt gebruiken, gaan we ervan uit dat de afdeling Verkoop een geïsoleerdere omgeving nodig heeft en dat 100 procent van een logische CPU altijd nodig is. Met behulp van de optie AFFINITY
kunnen de workloads voor verkoop en marketing worden gepland op verschillende logische CPU's. Ervan uitgaande dat de CAP_CPU_PERCENT
voor de marketinggroep is opgegeven, blijft de workload Marketing maximaal 30 procent van één CPU gebruiken, terwijl de workload Verkoop 100 procent van een andere CPU gebruikt.
MIN_IOPS_PER_VOLUME en MAX_IOPS_PER_VOLUME
Deze instellingen zijn de minimale en maximale fysieke IO-bewerkingen per seconde (IOPS) per schijfvolume voor een resourcepool. U kunt deze instellingen gebruiken om de fysieke IO's te beheren die zijn uitgegeven door gebruikersaanvragen in een bepaalde resourcegroep. De verkoopafdeling genereert bijvoorbeeld verschillende rapporten aan het einde van de maand in grote batches. De query's in deze batches kunnen IO's genereren die het schijfvolume kunnen verzadigen en invloed kunnen hebben op de prestaties van andere workloads met een hogere prioriteit op hetzelfde SQL Server-exemplaar. Als u deze workload wilt isoleren, wordt de MIN_IOPS_PER_VOLUME
ingesteld op 500 en wordt de MAX_IOPS_PER_VOLUME
ingesteld op 2000 voor de resourcepool van de Verkoopafdeling.
Door het systeem en door de gebruiker gedefinieerde resourcegroepen
Resource governor heeft twee ingebouwde resourcegroepen, de internal
-pool en de default
-pool. U kunt extra door de gebruiker gedefinieerde pools maken.
Interne poule
De internal
-pool bepaalt de resources die door de database-engine zelf worden gebruikt. Deze groep bevat altijd alleen de internal
groep en de pool kan op geen enkele manier worden gewijzigd. Resourceverbruik door de internal
-pool is niet beperkt. Werkbelastingen in de pool worden als kritiek beschouwd voor de werking van de databasemotor. Met Resource Governor kan de internal
groep andere pools onder druk zetten, zelfs als dit een schending van de limieten betekent die zijn ingesteld voor de andere pools.
Notitie
Het resourcegebruik van de internal
en internal
groep wordt niet afgetrokken van het totale resourcegebruik. Percentages worden berekend op basis van de totale beschikbare resources.
Standaardpool
In eerste instantie bevat de default
-groep alleen de default
-werklast-groep. U kunt de default
pool niet maken of verwijderen, maar u kunt deze wijzigen. De default
-pool kan naast de default
groep door de gebruiker gedefinieerde workloadgroepen bevatten. Vanaf SQL Server 2016 (13.x) is er naast de default
resourcegroep voor Database Engine-bewerkingen een default
externe resourcegroep specifiek voor externe processen, zoals het uitvoeren van R-scripts.
Notitie
De default
groep kan worden gewijzigd, maar kan niet worden verplaatst uit de default
groep.
Externe pool
Gebruikers kunnen een externe pool maken om resources voor de externe processen te definiëren. Voor R Services is deze groep specifiek van toepassing op rterm.exe
, BxlServer.exe
, python.exe
en andere processen die hierdoor zijn voortgebracht. Zie CREATE EXTERNAL RESOURCE POOLvoor meer informatie.
Door de gebruiker gedefinieerde resourcegroepen
U kunt door de gebruiker gedefinieerde resourcegroepen maken voor specifieke workloads in uw omgeving. Resource governor biedt DDL-instructies voor het maken, wijzigen en verwijderen van resourcegroepen. Zie Een resourcegroep maken, Een resourcegroep verwijderenen Instellingen voor de resourcegroep wijzigenvoor meer informatie.
Resourcetoewijzing tussen resourcepools
Wanneer u CPU- en geheugenlimieten en -reserveringen configureert, kan de som van MIN
waarden voor alle pools niet groter zijn dan 100 procent van de serverbronnen.
MAX
- en CAP
-waarden kunnen worden ingesteld overal in het bereik tussen de MIN
-waarde en de 100-procentwaarde.
Als een pool een resourcereservering heeft door het opgeven van een niet-nul MIN
-waarde, kan de effectieve MAX
-waarde van andere pools mogelijk worden verlaagd. Het minste van de geconfigureerde MAX
waarde van een pool en de som van de MIN
waarden van andere pools wordt afgetrokken van 100 procent.
In de volgende tabellen ziet u dit concept. In deze tabellen betekent LEAST(X, Y)
de kleinere waarde van X
en Y
. Alle numerieke waarden zijn percentages.
In de eerste tabel ziet u de instellingen voor de internal
-pool, de default
-pool en twee door de gebruiker gedefinieerde pools.
Naam van pool | MIN |
MAX |
Effective MAX |
Shared % |
Commentaar |
---|---|---|---|---|---|
internal |
0 | 100 | 100 | 0 |
Effective MAX en Shared % zijn niet van toepassing op de internal -pool. |
default |
0 | 100 | 30 | 30 | Effective MAX = LEAST(100, 100 - (20 + 50)) = 30 Shared % = Effective MAX - MIN = 30 |
Pool 1 |
20 | 100 | 50 | 30 | Effective MAX = LEAST(100, 100 - 50) = 50 Shared % = Effective MAX - MIN = 30 |
Pool 2 |
50 | 70 | 70 | 20 | Effective MAX = LEAST(70, 100 - 20) = 70 Shared % = Effective MAX - MIN = 20 |
Met behulp van de voorgaande tabel als voorbeeld kunnen we de aanpassingen die plaatsvinden verder illustreren wanneer een andere resourcegroep wordt gemaakt. Deze pool heeft de naam Pool 3
en heeft een MIN
instelling van 5.
Naam van pool | MIN |
MAX |
Effective MAX |
Shared % |
Commentaar |
---|---|---|---|---|---|
internal |
0 | 100 | 100 | 0 |
Effective MAX en Shared % zijn niet van toepassing op de internal -pool. |
default |
0 | 100 | 25 | 25 | Effective MAX = LEAST(100, 100 - (20 + 50 + 5)) = 25 Shared % = Effective MAX - MIN = 25 |
Pool 1 |
20 | 100 | 45 | 25 | Effective MAX = LEAST(100, 100 - (50 + 5))) = 45 Shared % = Effective MAX - MIN = 25 |
Pool 2 |
50 | 70 | 70 | 20 | Effective MAX = LEAST(70, 100 - (20 + 5))) = 70 Shared % = Effective MAX - MIN = 20 |
Pool 3 |
5 | 100 | 30 | 25 | Effective MAX = LEAST(100, 100 - (50 + 20))) = 30 Shared % = Effective MAX - MIN = 25 |
Het gedeelde deel van de pool is waar de beschikbare resources kunnen worden gebruikt als er resources beschikbaar zijn. Wanneer resources echter worden gebruikt, gaan ze naar de opgegeven pool en worden ze niet gedeeld. Dit gedrag kan het resourcegebruik verbeteren in gevallen waarin er geen aanvragen in een bepaalde pool zijn en de resources die niet zijn gereserveerd voor de pool, kunnen worden vrijgemaakt voor andere pools.
Enkele edge-gevallen van poolconfiguratie zijn:
- Alle pools definiëren minimumgegevens die in totaal 100 procent van de serverbronnen vertegenwoordigen. In dit geval zijn de effectieve maximumlimieten gelijk aan minimumaantallen. Dit is gelijk aan het verdelen van de serverbronnen in niet-overlappingsstukken, ongeacht hoe resources in een bepaalde pool worden gebruikt.
- Alle pools hebben nul minimum. Alle pools delen en concurreren voor beschikbare resources en hun runtimegrootten zijn gebaseerd op resourceverbruik in elke pool. Andere factoren, zoals groepsbeleid voor werkbelastingen, spelen een rol bij het vormgeven van poolgrootten.
Resourcegroeptaken
Resourcegroepen kunnen verschillende systeemresources beheren. Zie CREATE RESOURCE POOLvoor meer informatie.
Zie Zelfstudie: Resource Governor-configuratievoorbeelden en best practicesvoor meer voorbeelden en een volledig overzicht.
Taakbeschrijving | Artikel |
---|---|
Een resourcegroep maken | Een resourcepool maken |
Instellingen voor resourcepool wijzigen | Instellingen van resourcepool wijzigen |
Een resourcegroep verwijderen | een resourcepool verwijderen |
Resource governor biedt DDL-instructies voor het maken, wijzigen en verwijderen van resourcegroepen.
Voor meer informatie, inclusief de details over reserveringen en limieten voor resourcepools, zie: