9 Mayıs 2012 Çarşamba

SQL server 2008 de Resource Governor kullanarak, kullanıcı bazlı aciliyet ve önem sırasına göre öncelik tanımlama

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
 
  

 


Hiç yorum yok: