Sql server da Resource Governor kullanaranak serverınızda
transactionlara aciliyet ve önemlilik durumlarına göre kısıtlama
getirebilirisiniz.
Bu işlemin bir değişik versiyonu default
olarak sql server tarafından yapılmakta, incelemek isterseniz management
studio interface'imizden magement menüsü altındaki "Resource Governor"
grubunu açıp "Resource Pools" ı inceleye bilirsiniz.
burada
poollar default olarak sorgular arasında önceliklendirme yapmakta ama
yapay zeka kullanamadıklarından henüz aciliyet ve önem derecesine göre
öncelik tanıma noktasını ayırt edememektedirler.
Sql server
üzerinde bazı kullanıcılara veya gruplara memory ve cpu bazlı çeşitli
kısıtlamalar getirerek workload tanımlayıp sorgu, user vb gibi bir çok
bazda öncelik tanımlayabilirsiniz.
Resource Governor direk
management studio wizart'ı ile yapabiliriz. yanlız işin son bir parçası
olan classified funciton tanımlamak için t-sql den faydalanmamız
gerekir.
Resource Governor kıstasını şu şekilde tanımlayabiliriz.
use master
go
-- önce workload oluşturuyorum
CREATE WORKLOAD GROUP BI_User_groups;
go
-- Classifier fonksiyonu tanımlıyorum bun noktada dikkat edilmesi gereken bir Classifier fonksiyonu bir sistem üzerinde yanlızca bir adet çalışır
CREATE FUNCTION dbo.Classifier_fonksiyon()
RETURNS sysname
WITH SCHEMABINDING
AS
BEGIN
DECLARE @grp_adi sysname
IF (
SUSER_SNAME() IN ('BI_User')
AND IS_MEMBER ('db_admin') = 1
--AND HOST_NAME() IN ('BI_User')
--AND IS_SRVROLEMEMBER('dba') = 1
--AND APP_NAME()
)
BEGIN
SET @grp_adi= 'BI_User_groups';
END
RETURN @grp_adi
END;
GO
-- Resource Governor tanımladığımız classifier fonksiyonu ile register ediyorum
ALTER RESOURCE GOVERNOR WITH (CLASSIFIER_FUNCTION= dbo.fnResourceGovernorClassifier);
GO
CREATE RESOURCE POOL MaxMemory_icin
WITH (
MAX_MEMORY_PERCENT = 60
-- aynı şekilde aşağıdaki kıstaslardada kısıtlama tanımlayabilirsiniz.yuzde olarak
--, MIN_CPU_PERCENT = 0
--, MAX_CPU_PERCENT = 80
--, MIN_MEMORY_PERCENT = 0
);
GO
ALTER WORKLOAD GROUP BI_User_groups
WITH (
MAX_DOP = 1
--, IMPORTANCE = { LOW | MEDIUM | HIGH }
--, REQUEST_MAX_MEMORY_GRANT_PERCENT = 40
--, REQUEST_MAX_CPU_TIME_SEC = 600
--, REQUEST_MEMORY_GRANT_TIMEOUT_SEC = 600
--, GROUP_MAX_REQUESTS = 50
)
USING MaxMemory_icin
GO
-- Resource Governor ı start ediyorum.
ALTER RESOURCE GOVERNOR RECONFIGURE;
GO
Resource Governer ile vermiş
olduğumuz kıstaslar eşliğinde çalışıp çalışmadığını, kontrol etmek
için ise aşağıdaki sorguyu çalıştırıp kontrollerinizi yapabilirsiniz.
SELECT
es.session_id ,
es.login_time ,
es.login_name ,
[Group Name] = wg.name ,
[Host Name] = es.host_name ,
Application = es.program_name ,
Pool_Max_Memory_kb = rp.max_memory_kb,
Pool_Max_Memory_kb = rp.used_memory_kb ,
es.client_interface_name,
es.memory_usage,
es.total_elapsed_time
--buradaki * kullanarak tüm kontrollere de ulaşabiliriz SELECT *
FROM
sys.dm_resource_governor_workload_groups wg
INNER JOIN
sys.dm_exec_sessions es
ON es.group_id = wg.group_id
LEFT OUTER JOIN
sys.dm_resource_governor_resource_pools rp
on rp.pool_id = wg.pool_id
WHERE
wg.group_id > 2 --grup id ye göre kontrol edebiliriz.
Not: tüm değerler için isteğe göre aşağıdaki sorguları
select * from sys.dm_resource_governor_workload_groups
select * from sys.dm_exec_sessions
ve
select * from sys.dm_resource_governor_resource_pools