Delen via


Zelfstudie: Voorbeelden en aanbevolen procedures van Resource Governor-configuratie

van toepassing op:SQL ServerAzure SQL Managed Instance

Dit artikel bevat stapsgewijze voorbeelden om u te helpen resource governor te configureren en te valideren dat uw configuratie werkt zoals verwacht. Het begint met een eenvoudig voorbeeld en gaat verder met de complexere voorbeelden.

Het artikel bevat ook voorbeelden van queries voor het controleren van de resource governor en een lijst met beste werkwijzen voor de resource governor .

In alle voorbeelden wordt ervan uitgegaan dat resource governor in eerste instantie is uitgeschakeld en standaardinstellingen gebruikt en dat er geen door de gebruiker gedefinieerde resourcegroepen, workloadgroepen en classificatiefuncties bestaan.

Notitie

Als u de resource governor-configuratie in Azure SQL Managed Instance wilt wijzigen, moet u zich in de context van de master-database op de primaire replica bevinden.

De standaardgroep wijzigen

In dit voorbeeld wordt resource governor gebruikt om de maximale grootte van een geheugentoekenning te beperken voor alle gebruikersquery's. Dit wordt gedaan door de REQUEST_MAX_MEMORY_GRANT_PERCENT-instelling voor de default workloadgroep te verminderen van de standaardinstelling 25% tot 10%. In het voorbeeld wordt geen classificatiefunctiegebruikt. Dit betekent dat aanmeldingsverwerking niet wordt beïnvloed en dat alle gebruikerssessies nog steeds worden geclassificeerd in de default workloadgroep.

Mogelijk moet u de grootte van geheugentoekenningen beperken als query's wachten op geheugen, omdat andere query's te veel geheugen hebben gereserveerd. Zie Problemen met trage prestaties of onvoldoende geheugen oplossen die worden veroorzaakt door geheugentoelagen in SQL Servervoor meer informatie.

  1. Wijzig de standaardwerklastgroep.

    ALTER WORKLOAD GROUP [default] WITH (REQUEST_MAX_MEMORY_GRANT_PERCENT = 10);
    
  2. Schakel resource governor in om onze configuratie effectief te maken.

    ALTER RESOURCE GOVERNOR RECONFIGURE;
    
  3. Valideer de nieuwe instelling, inclusief de nieuwe maximale grootte van een geheugentoewijzing.

    SELECT group_id,
           wg.name AS workload_group_name,
           rp.name AS resource_pool_name,
           wg.request_max_memory_grant_percent_numeric AS request_max_memory_grant_percent,
           rp.max_memory_kb * wg.request_max_memory_grant_percent_numeric AS request_max_memory_grant_size_kb
    FROM sys.resource_governor_workload_groups AS wg
    INNER JOIN sys.dm_resource_governor_resource_pools AS rp
    ON wg.pool_id = rp.pool_id;
    
  4. Voer het volgende script uit om terug te keren naar de eerste configuratie:

    ALTER WORKLOAD GROUP [default] WITH (REQUEST_MAX_MEMORY_GRANT_PERCENT = 25);
    ALTER RESOURCE GOVERNOR RECONFIGURE;
    ALTER RESOURCE GOVERNOR DISABLE;
    

Een door de gebruiker gedefinieerde workloadgroep gebruiken

In dit voorbeeld wordt resource governor gebruikt om ervoor te zorgen dat alle aanvragen voor sessies met een specifieke toepassingsnaam niet worden uitgevoerd met de mate van parallelle uitvoering (DOP) die hoger is dan vier. Dit wordt gedaan door sessies in een workloadgroep te classificeren waarbij instelling MAX_DOP op 4 is gezet.

Zie Server-configuratie: maximale mate van parallelle uitvoeringvoor meer informatie over het configureren van de maximale mate van parallelle uitvoering.

  1. Maak een workloadgroep die DOP beperkt. De groep gebruikt de default resourcegroep omdat we alleen DOP willen beperken voor een specifieke toepassing, maar geen CPU-, geheugen- of I/O-resources reserveren of beperken.

    CREATE WORKLOAD GROUP limit_dop
    WITH (
         MAX_DOP = 4
         )
    USING [default];
    
  2. Maak de classificatiefunctie. De functie maakt gebruik van de ingebouwde APP_NAME() functie om de naam van de toepassing te bepalen die is opgegeven in de clientverbindingsreeks. Als de naam van de toepassing is ingesteld op limited_dop_application, retourneert de functie de naam van de workloadgroep die DOP beperkt. Anders retourneert de functie default als naam van de workloadgroep.

    USE master;
    GO
    
    CREATE FUNCTION dbo.rg_classifier()
    RETURNS sysname
    WITH SCHEMABINDING
    AS
    BEGIN
    
    DECLARE @WorkloadGroupName sysname = N'default';
    
    IF APP_NAME() = N'limited_dop_application'
        SELECT @WorkloadGroupName = N'limit_dop';
    
    RETURN @WorkloadGroupName;
    
    END;
    GO
    
  3. Wijzig de configuratie van resource governor om de configuratie effectief te maken en schakel resource governor in.

    ALTER RESOURCE GOVERNOR WITH (CLASSIFIER_FUNCTION = dbo.rg_classifier);
    ALTER RESOURCE GOVERNOR RECONFIGURE;
    
  4. Query sys.resource_governor_configuration om te controleren of de Resource Governor is ingeschakeld en gebruikmaakt van de classificatiefunctie die we hebben gemaakt.

    SELECT OBJECT_SCHEMA_NAME(classifier_function_id) AS classifier_schema_name,
           OBJECT_NAME(classifier_function_id) AS classifier_object_name,
           is_enabled
    FROM sys.resource_governor_configuration;
    
    classifier_schema_name      classifier_object_name      is_enabled
    ----------------------      ----------------------      ----------
    dbo                         rg_classifier               1
    
  5. Controleer of sessies met een specifieke toepassingsnaam zijn geclassificeerd in de limit_dop workloadgroep, terwijl andere sessies blijven worden geclassificeerd in de default workloadgroep. We gebruiken een query die gebruikmaakt van sys.dm_exec_sessions en sys.resource_governor_workload_groups systeemweergaven om de naam van de toepassing en de naam van de workloadgroep voor de huidige sessie te retourneren.

    1. Selecteer in SQL Server Management Studio (SSMS) File in het hoofdmenu, New, Database Engine Query.

    2. Geef in het dialoogvenster 'Verbinding maken met database-engine' hetzelfde database-engine-exemplaar op waarin u de workloadgroep en classificatiefunctie hebt gemaakt. Selecteer het tabblad Aanvullende verbindingsparameters en voer App=limited_dop_applicationin. Hierdoor gebruikt SSMS de naam limited_dop_application als de toepassingnaam wanneer verbinding gemaakt wordt met het exemplaar.

    3. Selecteer en verbind om een nieuwe verbinding te openen.

    4. Voer in hetzelfde queryvenster de volgende query uit:

      SELECT s.program_name AS application_name,
             wg.name AS workload_group_name,
             wg.max_dop
      FROM sys.dm_exec_sessions AS s
      INNER JOIN sys.resource_governor_workload_groups AS wg
      ON s.group_id = wg.group_id
      WHERE s.session_id = @@SPID;
      

      U ziet nu de volgende uitvoer, waarin wordt weergegeven dat de sessie is geclassificeerd in de limit_dop workloadgroep met het maximum aantal DOP's dat is ingesteld op vier:

      application_name            workload_group_name     max_dop
      ----------------            -------------------     -------
      limited_dop_application     limit_dop               4
      
    5. Herhaal de bovenstaande stappen, maar voer niets in het vak in op het tabblad Aanvullende verbindingsparameters. De uitvoer verandert, met de standaardnaam van de SSMS-toepassing en de default workloadgroep met de standaardwaarde 0 voor het maximum aantal DOP's.

      application_name                                    workload_group_name     max_dop
      ----------------                                    -------------------     -------
      Microsoft SQL Server Management Studio - Query      default                 0
      
  6. Als u wilt terugkeren naar de eerste configuratie van dit voorbeeld, verbreekt u alle sessies met behulp van de limit_dop workloadgroep en voert u het volgende T-SQL-script uit. Het script bevat de volgende stappen:

    1. Schakel resource governor uit zodat de classificatiefunctie kan worden verwijderd.
    2. Verwijder de workloadgroep. Hiervoor is vereist dat er geen sessies zijn die deze werklastgroep gebruiken.
    3. Configureer resource governor opnieuw om de effectieve configuratie opnieuw te laden zonder de classificatiefunctie en de workloadgroep. Dit maakt resource governor mogelijk.
    4. Schakel resource governor uit om terug te keren naar de eerste configuratie.
    /* Disable resource governor so that the classifier function can be dropped. */
    ALTER RESOURCE GOVERNOR DISABLE;
    ALTER RESOURCE GOVERNOR WITH (CLASSIFIER_FUNCTION = NULL);
    DROP FUNCTION IF EXISTS dbo.rg_classifier;
    
    /* Drop the workload group. This requires that no sessions are using this workload group. */
    DROP WORKLOAD GROUP limit_dop;
    
    /* Reconfigure resource governor to reload the effective configuration without the classifier function and the workload group. This enables resource governor. */
    ALTER RESOURCE GOVERNOR RECONFIGURE;
    
    /* Disable resource governor to revert to the initial configuration. */
    ALTER RESOURCE GOVERNOR DISABLE;
    

Meerdere resourcegroepen en workloadgroepen gebruiken

In dit voorbeeld wordt resource governor gebruikt om sessies van een toepassing voor orderverwerking te classificeren in verschillende workloadgroepen en resourcegroepen, afhankelijk van het tijdstip van de dag. Deze configuratie wijst meer resources toe aan de toepassing tijdens piekverwerkingstijden en beperkt de bijbehorende resources tijdens vrije uren. In het voorbeeld wordt ervan uitgegaan dat de toepassing geen langlopende sessies gebruikt.

  1. Maak twee resourcepools voor de verwerking tijdens piekuren en buiten piekuren.

    • De peak_hours_pool pool garandeert (reserves) minimaal 20% van de gemiddelde CPU-bandbreedte via MIN_CPU_PERCENTen beperkt geen CPU-bandbreedte door MAX_CPU_PERCENT in te stellen op 100.
    • De off_hours_pool-pool reserveert geen CPU-bandbreedte door MIN_CPU_PERCENT in te stellen op 0, maar beperkt de CPU-bandbreedte tot 50% wanneer CPU-conflicten aanwezig zijn door MAX_CPU_PERCENT in te stellen op 50.
    CREATE RESOURCE POOL peak_hours_pool
    WITH (
         MIN_CPU_PERCENT = 20,
         MAX_CPU_PERCENT = 100
         );
    
    CREATE RESOURCE POOL off_hours_pool
    WITH (
         MIN_CPU_PERCENT = 0,
         MAX_CPU_PERCENT = 50
         );
    

    Resourcegroepen kunnen systeemresources, zoals CPU, geheugen en I/O, reserveren en beperken. Zie CREATE RESOURCE POOLvoor meer informatie.

  2. Maak twee workloadgroepen, één voor elke resourcegroep.

    • De peak_hours_group beperkt het aantal gelijktijdige aanvragen niet door GROUP_MAX_REQUESTS in te stellen op de standaardwaarde van 0.
    • De off_hours_group beperkt het aantal gelijktijdige aanvragen voor alle sessies die in deze groep zijn geclassificeerd, door GROUP_MAX_REQUESTS in te stellen op 200.
    CREATE WORKLOAD GROUP peak_hours_group
    WITH (
         GROUP_MAX_REQUESTS = 0
         )
    USING peak_hours_pool;
    
    CREATE WORKLOAD GROUP off_hours_group
    WITH (
         GROUP_MAX_REQUESTS = 200
         )
    USING off_hours_pool;
    

    Workloadgroepen definiëren beleidsregels zoals het maximum aantal aanvragen, de maximale mate van parallelle uitvoering en de maximale grootte van geheugentoe kennen. Zie CREATE WORKLOAD GROUPvoor meer informatie.

  3. Maak een tabel aan en vul deze in die de tijdsintervallen voor piekuren en daluren definieert.

    • Elke rij in de tabel definieert de begin- en eindtijd van het interval en de naam van de workloadgroep die tijdens het interval moet worden gebruikt.
    • De begin- en eindtijd van elk interval is inclusief.
    • De tabel wordt gemaakt in de master-database, zodat deze kan worden gebruikt in een schemagebonden classificatiefunctie.
    USE master;
    GO
    
    CREATE TABLE dbo.workload_interval
    (
    workload_group_name sysname NOT NULL,
    start_time time(7) NOT NULL,
    end_time time(7) NOT NULL,
    CONSTRAINT pk_workload_interval PRIMARY KEY (start_time, workload_group_name),
    CONSTRAINT ak_workload_interval_1 UNIQUE (end_time, workload_group_name),
    CONSTRAINT ck_workload_interval_1 CHECK (start_time < end_time)
    );
    GO
    
    INSERT INTO dbo.workload_interval
    VALUES (N'off_hours_group', '00:00', '06:29:59.9999999'),
           (N'peak_hours_group', '06:30', '18:29:59.9999999'),
           (N'off_hours_group', '18:30', '23:59:59.9999999');
    
  4. Maak de classificatiefunctie.

    • De gegevens in de tabel hebben naar verwachting één overeenkomende rij voor een bepaald tijdstip van de dag. Als de gegevens deze regel schenden, retourneert de functie default als naam van de workloadgroep.
    • De volgende voorbeeldfunctie retourneert ook default als de toepassingsnaam die wordt geretourneerd door de ingebouwde APP_NAME() functie iets anders is dan order_processing.
    USE master;
    GO
    
    CREATE OR ALTER FUNCTION dbo.rg_classifier()
    RETURNS sysname
    WITH SCHEMABINDING
    AS
    BEGIN
    
    DECLARE @WorkloadGroupName sysname = N'default';
    
    SELECT @WorkloadGroupName = workload_group_name
    FROM dbo.workload_interval
    WHERE APP_NAME() = N'order_processing'
          AND
          CAST(GETDATE() AS time(7)) BETWEEN start_time AND end_time;
    
    IF @@ROWCOUNT > 1
        SELECT @WorkloadGroupName = N'default';
    
    RETURN @WorkloadGroupName;
    
    END;
    GO
    
  5. Dit is een optionele stap. In plaats van een tabel in de master database te maken, kunt u een constructor met tabelwaarde gebruiken om de tijdsintervallen rechtstreeks in de classificatiefunctie te definiëren. Dit is de aanbevolen methode wanneer de gegevensgrootte klein is en de classificatiefunctiecriteria niet regelmatig worden gewijzigd. Hier volgt een voorbeeld van dezelfde classificatie die gebruikmaakt van een tabelwaardeconstructor in plaats van een tabel in master.

    USE master;
    GO
    
    CREATE OR ALTER FUNCTION dbo.rg_classifier()
    RETURNS sysname
    WITH SCHEMABINDING
    AS
    BEGIN
    
    DECLARE @WorkloadGroupName sysname = N'default';
    
    SELECT @WorkloadGroupName = workload_group_name
    FROM (
         VALUES (CAST(N'off_hours_group' AS sysname),  CAST('00:00' AS time(7)), CAST('06:29:59.9999999' AS time(7))),
                (CAST(N'peak_hours_group' AS sysname), CAST('06:30' AS time(7)), CAST('18:29:59.9999999' AS time(7))),
                (CAST(N'off_hours_group' AS sysname),  CAST('18:30' AS time(7)), CAST('23:59:59.9999999'AS time(7)))
         ) AS wg (workload_group_name, start_time, end_time)
    WHERE APP_NAME() = N'order_processing'
          AND
          CAST(GETDATE() AS time(7)) BETWEEN start_time AND end_time;
    
    IF @@ROWCOUNT > 1
        SELECT @WorkloadGroupName = N'default';
    
    RETURN @WorkloadGroupName;
    
    END;
    GO
    
  6. Wijzig de configuratie van resource governor om de configuratie effectief te maken en schakel resource governor in.

    ALTER RESOURCE GOVERNOR WITH (CLASSIFIER_FUNCTION = dbo.rg_classifier);
    ALTER RESOURCE GOVERNOR RECONFIGURE;
    
  7. Controleer of resource governor is ingeschakeld, de opgegeven classificatiefunctie gebruikt en of de classificatiefunctie werkt zoals verwacht met behulp van vergelijkbare stappen als in het vorige voorbeeld. Deze keer voeren we App=order_processing in op het tabblad Aanvullende verbindingsparameters in het dialoogvenster SSMS-verbinding zodat deze overeenkomt met de naam van de toepassing in de classificatiefunctie. Voer de volgende query uit om de naam van de toepassing, de workloadgroep, de resourcegroep en de CPU-reservering en limiet voor de huidige sessie te bepalen:

    SELECT s.program_name AS application_name,
           wg.name AS workload_group_name,
           wg.group_max_requests,
           rp.name AS resource_pool_name,
           rp.min_cpu_percent,
           rp.max_cpu_percent
    FROM sys.dm_exec_sessions AS s
    INNER JOIN sys.resource_governor_workload_groups AS wg
    ON s.group_id = wg.group_id
    INNER JOIN sys.resource_governor_resource_pools AS rp
    ON wg.pool_id = rp.pool_id
    WHERE s.session_id = @@SPID;
    

    De resultaten zijn afhankelijk van het tijdstip van de dag. Als de huidige tijd bijvoorbeeld 14:30 is, ziet u in het resultaat dat peak_hours_group en peak_hours_pool worden gebruikt:

    application_name    workload_group_name     group_max_requests      resource_pool_name      min_cpu_percent     max_cpu_percent
    -----------------   --------------------    ------------------      -------------------     ---------------     ---------------
    order_processing    peak_hours_group        0                       peak_hours_pool         20                  100
    
  8. Als u wilt terugkeren naar de eerste configuratie van dit voorbeeld, verbreekt u alle sessies met behulp van de peak_hours_group- en off_hours_group workloadgroepen en voert u het volgende T-SQL-script uit. Het script bevat de volgende stappen:

    1. Schakel resource governor uit zodat de classificatiefunctie kan worden verwijderd.
    2. Verwijder de workloadgroepen. Het is noodzakelijk dat er geen sessies deze werklastgroepen gebruiken.
    3. Zodra de workloadgroepen zijn verwijderd, verwijder de resourcepools.
    4. Configureer resource governor opnieuw om de effectieve configuratie opnieuw te laden zonder de classificatiefunctie en door de gebruiker gedefinieerde workloadgroepen en resourcegroepen. Dit maakt resource governor mogelijk.
    5. Schakel resource governor uit om terug te keren naar de eerste configuratie.
    /* Disable resource governor so that the classifier function can be dropped. */
    ALTER RESOURCE GOVERNOR DISABLE;
    ALTER RESOURCE GOVERNOR WITH (CLASSIFIER_FUNCTION = NULL);
    DROP FUNCTION IF EXISTS dbo.rg_classifier;
    DROP TABLE IF EXISTS dbo.workload_interval;
    
    /* Drop the workload groups. This requires that no sessions are using these workload groups. */
    DROP WORKLOAD GROUP peak_hours_group;
    DROP WORKLOAD GROUP off_hours_group;
    
    /* Once the workload groups are dropped, drop the resource pools. */
    DROP RESOURCE POOL peak_hours_pool;
    DROP RESOURCE POOL off_hours_pool;
    
    /* Reconfigure resource governor to reload the effective configuration without the classifier function and user-defined workload groups and resource pools. This enables resource governor. */
    ALTER RESOURCE GOVERNOR RECONFIGURE;
    
    /* Disable resource governor to revert to the initial configuration. */
    ALTER RESOURCE GOVERNOR DISABLE;
    

Resource Governor bewaken met behulp van systeemweergaven

Voorbeeldquery's in deze sectie laten zien hoe u runtimestatistieken en gedrag van Resource Governor kunt bewaken.

Statistieken van Resource Governor zijn cumulatief sinds de laatste server opnieuw is opgestart. Als u statistieken wilt verzamelen vanaf een bepaalde tijd, kunt u statistieken opnieuw instellen met behulp van de ALTER RESOURCE GOVERNOR RESET STATISTICS-instructie.

Runtimestatistieken van resourcepool

Voor elke resourcegroep houdt resource governor cpu- en geheugengebruik bij, out-of-memory gebeurtenissen, geheugentoelagen, I/O en andere statistieken. Zie sys.dm_resource_governor_resource_poolsvoor meer informatie.

De volgende query retourneert een subset van beschikbare statistieken voor alle resourcegroepen:

SELECT rp.pool_id,
       rp.name AS resource_pool_name,
       wg.workload_group_count,
       rp.statistics_start_time,
       rp.total_cpu_usage_ms,
       rp.target_memory_kb,
       rp.used_memory_kb,
       rp.out_of_memory_count,
       rp.active_memgrant_count,
       rp.total_memgrant_count,
       rp.total_memgrant_timeout_count,
       rp.read_io_completed_total,
       rp.write_io_completed_total,
       rp.read_bytes_total,
       rp.write_bytes_total,
       rp.read_io_stall_total_ms,
       rp.write_io_stall_total_ms
FROM sys.dm_resource_governor_resource_pools AS rp
OUTER APPLY (
            SELECT COUNT(1) AS workload_group_count
            FROM sys.dm_resource_governor_workload_groups AS wg
            WHERE wg.pool_id = rp.pool_id
            ) AS wg;

Runtimestatistieken van workloadgroep

Voor elke workloadgroep houdt Resource Governor CPU-tijd bij, het aantal aanvragen, geblokkeerde taken, wachttijd vergrendelen, queryoptimalisaties en andere statistieken. Zie sys.resource_governor_workload_groupsvoor meer informatie.

De volgende query retourneert een subset van beschikbare statistieken voor alle workloadgroepen:

SELECT wg.name AS workload_group_name,
       rp.name AS resource_pool_name,
       wg.statistics_start_time,
       wg.total_request_count,
       wg.total_cpu_usage_ms,
       wg.blocked_task_count,
       wg.total_lock_wait_time_ms,
       wg.total_query_optimization_count,
       wg.max_request_grant_memory_kb,
       wg.active_parallel_thread_count,
       wg.effective_max_dop,
       wg.request_max_memory_grant_percent_numeric
FROM sys.dm_resource_governor_workload_groups AS wg
INNER JOIN sys.dm_resource_governor_resource_pools AS rp
ON wg.pool_id = rp.pool_id

Sessies aggregeren op workloadgroep en sessiekenmerken

De volgende query geeft een distributie van sessies over workload groepen en geaggregeerde sessiestatistieken voor elke workload groep.

Een groot aantal sessies met de status preconnect kan duiden op traagheid in de uitvoering van de classificatie.

SELECT wg.name AS workload_group_name,
       rp.name AS resource_pool_name,
       s.program_name AS application_name,
       s.login_name,
       s.host_name,
       s.status,
       d.name AS database_name,
       MIN(s.login_time) AS first_login_time,
       MAX(s.login_time) AS last_login_time,
       MAX(s.last_request_start_time) AS last_request_start_time,
       COUNT(1) AS session_count
FROM sys.dm_exec_sessions AS s
INNER JOIN sys.dm_resource_governor_workload_groups AS wg
ON s.group_id = wg.group_id
INNER JOIN sys.dm_resource_governor_resource_pools AS rp
ON wg.pool_id = rp.pool_id
INNER JOIN sys.databases AS d
ON s.database_id = d.database_id
GROUP BY wg.name,
         rp.name,
         s.program_name,
         s.login_name,
         s.host_name,
         s.status,
         d.name;

Aanvragen aggregeren per workloadgroep en aanvraagkenmerken

De volgende query retourneert een verdeling van aanvragen over workloadgroepen en samengevatte aanvraagstatistieken voor elke workloadgroep.

SELECT wg.name AS workload_group_name,
       rp.name AS resource_pool_name,
       r.command,
       r.status,
       d.name AS database_name,
       COUNT(1) AS request_count,
       MIN(r.start_time) AS first_request_start_time,
       MAX(r.start_time) AS last_request_start_time,
       SUM(CAST(r.total_elapsed_time AS bigint)) AS total_elapsed_time_ms
FROM sys.dm_exec_requests AS r
INNER JOIN sys.dm_resource_governor_workload_groups AS wg
ON r.group_id = wg.group_id
INNER JOIN sys.dm_resource_governor_resource_pools AS rp
ON wg.pool_id = rp.pool_id
INNER JOIN sys.databases AS d
ON r.database_id = d.database_id
GROUP BY wg.name,
         rp.name,
         r.command,
         r.status,
         d.name;

Best practices voor Resource Governor

  • Configureer Dedicated Administrator Connection (DAC) en leer hoe u deze kunt gebruiken. Zie Diagnostische verbinding voor databasebeheerdersvoor meer informatie. Als de configuratie van uw resource governor niet werkt, kunt u DAC gebruiken om dit op te lossen of om resource governor uit te schakelen.
  • Bij het configureren van resourcegroepen moet u zorgvuldig grote waarden opgeven voor MIN_CPU_PERCENT, MIN_MEMORY_PERCENTen MIN_IOPS_PER_VOLUME. Een MIN-configuratie-instelling reserveert resources voor een resourcegroep en maakt deze niet beschikbaar voor andere resourcegroepen, waaronder de default-pool. Zie Een resourcegroep makenvoor meer informatie.
  • De classificatiefunctie breidt de verwerkingstijd van aanmeldingen uit. Vermijd complexe logica en langlopende of resource-intensieve query's in de classificatie, met name als query's grote tabellen gebruiken. Een te complexe functie kan vertragingen bij aanmelding of verbindings-time-outs veroorzaken.
  • Als u een tabel in de classificatie moet gebruiken en de tabel klein en meestal statisch is, kunt u overwegen om in plaats daarvan een constructor met tabelwaarden te gebruiken, zoals wordt weergegeven in een voorbeeld eerder in dit artikel.
  • Vermijd het gebruik van een vaak gewijzigde tabel in de classificatie. Dit verhoogt het risico op blokkeren dat aanmeldingen kan vertragen en time-outs voor verbindingen kan veroorzaken. Met de volgende tijdelijke oplossingen kunt u het risico beperken, maar deze hebben een nadeel, waaronder het risico op onjuiste classificatie:
    • Overweeg het gebruik van de NOLOCK-tabelhint of de equivalente READUNCOMMITTED-hint. Zie READUNCOMMITTEDvoor meer informatie.
    • Overweeg het gebruik van de LOCK_TIMEOUT instelling aan het begin van de classificatiefunctie en stel deze in op een lage waarde, zoals 1000 milliseconden. Zie SET LOCK_TIMEOUTvoor meer informatie.
  • U kunt een classificatiefunctie niet wijzigen terwijl ernaar wordt verwezen in de resource governor-configuratie. U kunt de configuratie echter wijzigen om een andere classificatiefunctie te gebruiken. Als u wijzigingen wilt aanbrengen in de classificatie, kunt u een paar classificatiefuncties maken. U kunt bijvoorbeeld dbo.rg_classifier_A() en dbo.rg_classifier_B()maken. Wanneer een wijziging in de classificatielogica nodig is, voert u de volgende stappen uit:
    1. Gebruik de instructie ALTER FUNCTION om de wijzigingen in de functie aan te brengen die momenteel niet gebruikt in de configuratie van de resource governor.
    2. Gebruik de ALTER RESOURCE GOVERNOR instructie om de gewijzigde classificatie actief te maken en configureer vervolgens resource governor opnieuw. Bijvoorbeeld:
      ALTER RESOURCE GOVERNOR WITH (CLASSIFIER_FUNCTION = dbo.rg_classifier_B);
      ALTER RESOURCE GOVERNOR RECONFIGURE;
      
    3. Als een wijziging opnieuw nodig is, volgt u dezelfde stappen met behulp van de andere functie (dbo.rg_classifier_A()).
  • Resource governor-configuratie wordt opgeslagen in de master-database. Zorg ervoor dat u regelmatig een back-up maakt van masteren weet hoe u deze kunt herstellen. Zie Back-up maken en herstellen: Systeemdatabasesvoor meer informatie. Omdat er beperkingen zijn met betrekking tot het herstellen van master, raden we u aan om ook afzonderlijk een kopie van configuratiescripts voor resource governor op te slaan. U kunt de configuratie van resource governor opnieuw maken op basis van scripts als de master database opnieuw moet worden opgebouwd.