Bonjour,
Suite à la lecture du tutoriel de Mike Davem, je tente en vain de faire fonctionner le gouverneur de ressource sur mon serveur de développement.
J'ai créé mes deux pool et mes deux work group correspondant :
J'ai ensuite créé deux LOGIN test sur mon serveur, soit rg_reporting et rg_replication.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 CREATE RESOURCE POOL [pReplication] WITH(min_cpu_percent=30, max_cpu_percent=80, min_memory_percent=0, max_memory_percent=100) CREATE RESOURCE POOL [pReporting] WITH(min_cpu_percent=50, max_cpu_percent=50, min_memory_percent=0, max_memory_percent=100) CREATE WORKLOAD GROUP [gRepl] WITH(group_max_requests=0, importance=Medium, request_max_cpu_time_sec=0, request_max_memory_grant_percent=25, request_memory_grant_timeout_sec=0, max_dop=0) USING [pReplication] CREATE WORKLOAD GROUP [gRep] WITH(group_max_requests=0, importance=Medium, request_max_cpu_time_sec=0, request_max_memory_grant_percent=25, request_memory_grant_timeout_sec=0, max_dop=0) USING [pReporting]
Puis ma fonction de classification :
J'ai activité mon gouverneur de ressource :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 CREATE FUNCTION [dbo].[classified_function]() RETURNS SYSNAME WITH SCHEMABINDING AS BEGIN RETURN ( SELECT CASE SUSER_NAME() WHEN 'RG_Replication' THEN 'gRepl' WHEN 'RG_Reporting' THEN 'gRep' ELSE 'default' END ) END;
Cela pointe bien vers la bonne fonction...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 select * From sys.resource_governor_configuration classifier_function_id is_enabled 1143675122 1
Je vais ensuite dans le Management Studio et j'ouvre de nouvelles connection avec chacun de mes login. Lorsque je vérifie que la fonction de classification retourne le bon groupe, cela semble fonctionner :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 select name, object_id, type_desc from sys.objects where object_id = 1143675122 name object_id type_desc classified_function 1143675122 SQL_SCALAR_FUNCTION
Mais voilà, lorsque je démarre une requête afin de valider que tout est okay via le performance monitor, je me rend compte que ma fonction de classification renvoie tout tout tout dans le groupe défault....
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 select SUSER_NAME() as session_name, dbo.classified_function() as groupe_name session_name groupe_name RG_Reporting gRep
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 set nocount on declare @i int = 0; declare @result varchar(1000); while @i < 10000000 begin select @result = @@VERSION + CAST(rand() as varchar(500)) select @result = @@VERSION + CAST(rand() as varchar(500)) select @result = @@VERSION + CAST(rand() as varchar(500)) set @i = @i + 1; endJe ne comprend pas du tout pourquoi ma fonction de classification ne fonctionne pas. Lorsque je l'appelle manuellement elle me retourne pourtant le bon groupe.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 select * from sys.dm_os_performance_counters where counter_name = 'cpu usage %' object_name counter_name instance_name cntr_value cntr_type SQLServer:Workload Group Stats CPU usage % gRep 0 537003264 SQLServer:Workload Group Stats CPU usage % gRepl 0 537003264 SQLServer:Workload Group Stats CPU usage % default 1007 537003264 SQLServer:Workload Group Stats CPU usage % internal 24 537003264 SQLServer:Resource Pool Stats CPU usage % pReplication 0 537003264 SQLServer:Resource Pool Stats CPU usage % pReporting 0 537003264 SQLServer:Resource Pool Stats CPU usage % default 1007 537003264 SQLServer:Resource Pool Stats CPU usage % internal 24 537003264
Vous avez des pistes de solutions pour moi ?
Merci !
Partager