Zelfstudie: Voorbeelden en aanbevolen procedures van Resource Governor-configuratie
van toepassing op:SQL Server
Azure 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.
Wijzig de standaardwerklastgroep.
ALTER WORKLOAD GROUP [default] WITH (REQUEST_MAX_MEMORY_GRANT_PERCENT = 10);
Schakel resource governor in om onze configuratie effectief te maken.
ALTER RESOURCE GOVERNOR RECONFIGURE;
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;
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.
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];
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 functiedefault
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
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;
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
Controleer of sessies met een specifieke toepassingsnaam zijn geclassificeerd in de
limit_dop
workloadgroep, terwijl andere sessies blijven worden geclassificeerd in dedefault
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.Selecteer in SQL Server Management Studio (SSMS) File in het hoofdmenu, New, Database Engine Query.
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_application
in. Hierdoor gebruikt SSMS de naamlimited_dop_application
als de toepassingnaam wanneer verbinding gemaakt wordt met het exemplaar.Selecteer en verbind om een nieuwe verbinding te openen.
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
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 standaardwaarde0
voor het maximum aantal DOP's.application_name workload_group_name max_dop ---------------- ------------------- ------- Microsoft SQL Server Management Studio - Query default 0
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:- Schakel resource governor uit zodat de classificatiefunctie kan worden verwijderd.
- Verwijder de workloadgroep. Hiervoor is vereist dat er geen sessies zijn die deze werklastgroep gebruiken.
- Configureer resource governor opnieuw om de effectieve configuratie opnieuw te laden zonder de classificatiefunctie en de workloadgroep. Dit maakt resource governor mogelijk.
- 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.
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 viaMIN_CPU_PERCENT
en beperkt geen CPU-bandbreedte doorMAX_CPU_PERCENT
in te stellen op100
. - De
off_hours_pool
-pool reserveert geen CPU-bandbreedte doorMIN_CPU_PERCENT
in te stellen op0
, maar beperkt de CPU-bandbreedte tot 50% wanneer CPU-conflicten aanwezig zijn doorMAX_CPU_PERCENT
in te stellen op50
.
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.
- De
Maak twee workloadgroepen, één voor elke resourcegroep.
- De
peak_hours_group
beperkt het aantal gelijktijdige aanvragen niet doorGROUP_MAX_REQUESTS
in te stellen op de standaardwaarde van0
. - De
off_hours_group
beperkt het aantal gelijktijdige aanvragen voor alle sessies die in deze groep zijn geclassificeerd, doorGROUP_MAX_REQUESTS
in te stellen op200
.
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.
- De
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');
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 danorder_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
- 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
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 inmaster
.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
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;
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
enpeak_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
Als u wilt terugkeren naar de eerste configuratie van dit voorbeeld, verbreekt u alle sessies met behulp van de
peak_hours_group
- enoff_hours_group
workloadgroepen en voert u het volgende T-SQL-script uit. Het script bevat de volgende stappen:- Schakel resource governor uit zodat de classificatiefunctie kan worden verwijderd.
- Verwijder de workloadgroepen. Het is noodzakelijk dat er geen sessies deze werklastgroepen gebruiken.
- Zodra de workloadgroepen zijn verwijderd, verwijder de resourcepools.
- 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.
- 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_PERCENT
enMIN_IOPS_PER_VOLUME
. EenMIN
-configuratie-instelling reserveert resources voor een resourcegroep en maakt deze niet beschikbaar voor andere resourcegroepen, waaronder dedefault
-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 equivalenteREADUNCOMMITTED
-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.
- Overweeg het gebruik van de
- 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()
endbo.rg_classifier_B()
maken. Wanneer een wijziging in de classificatielogica nodig is, voert u de volgende stappen uit:- 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.
- 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;
- 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 vanmaster
en weet hoe u deze kunt herstellen. Zie Back-up maken en herstellen: Systeemdatabasesvoor meer informatie. Omdat er beperkingen zijn met betrekking tot het herstellen vanmaster
, 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 demaster
database opnieuw moet worden opgebouwd.
Verwante inhoud
- Resource Governor
- Resource Governor inschakelen
- Resource Governor-resourcegroep
- Resource Governor-workloadgroep
- Resource Governor configureren met behulp van een sjabloon
- eigenschappen van resource governor weergeven en wijzigen
- WIJZIG RESOURCE GOVERNOR
- RESOURCEPOOL MAKEN
- WORKLOADGROEP MAKEN
- FUNCTIE MAKEN