SQL SERVER RESOURCE GOVERNOR

Bu makalede Sql Server ’da kaynak kullanımımız için farklı seçenekler ve değerlendirme fırsatları sunan Resource Governor yakından kullanım örneklerini göreceğiz. Günümüzde sistemlerimizin verimli kaynak kullanımı ve buna yönelik olarak çalışmalar oldukça önemli bir durumdadır. Bu kapsamda Veri tabanı sistemlerimizin kurulu olduğu sunucu kaynaklarımızdan maksimum faydayı ve verimi almaya çalışmaktayız. Bu kapsamda SQL Server veri tabanlarımızda kaynak (CPU, bellek, disk ve I/O) kullanımını yönetmek ve optimize etmek için kullanılan güçlü bir araç olan Resource Governor bizlere 2008 ve sonraki sürümlerde sunmaktadır. Bu sayede kritik iş yüklerinizin ihtiyaç duyduğu kaynaklara erişmesini sağlayabilir ve performansınızı optimize ederek veri tabanlarına gelebilecek aşırı yükü önlemiş olabilirsiniz. Biraz çalışma prensibinden bahsedelim, Resource Governor veri tabanı nesne ve sorgularında bir öncelik atayarak çalışır. Bunu şu şekilde örneklendirebiliriz sunucuya gelen uygulama sorguları var bunu servis kullanıcısı ile, raporlama sorguları var bunu raporlama kullanıcısı ile ve ilgili uygulamanın loglarının sorgulamasını yapan log kullanıcısı bulunmaktadır bu yapıda en öncelikli sorgularımız […]

SQL SERVER RESOURCE GOVERNOR

Bu makalede Sql Server ’da kaynak kullanımımız için farklı seçenekler ve değerlendirme fırsatları sunan Resource Governor yakından kullanım örneklerini göreceğiz.

Günümüzde sistemlerimizin verimli kaynak kullanımı ve buna yönelik olarak çalışmalar oldukça önemli bir durumdadır. Bu kapsamda Veri tabanı sistemlerimizin kurulu olduğu sunucu kaynaklarımızdan maksimum faydayı ve verimi almaya çalışmaktayız. Bu kapsamda SQL Server veri tabanlarımızda kaynak (CPU, bellek, disk ve I/O) kullanımını yönetmek ve optimize etmek için kullanılan güçlü bir araç olan Resource Governor bizlere 2008 ve sonraki sürümlerde sunmaktadır. Bu sayede kritik iş yüklerinizin ihtiyaç duyduğu kaynaklara erişmesini sağlayabilir ve performansınızı optimize ederek veri tabanlarına gelebilecek aşırı yükü önlemiş olabilirsiniz.

Biraz çalışma prensibinden bahsedelim, Resource Governor veri tabanı nesne ve sorgularında bir öncelik atayarak çalışır. Bunu şu şekilde örneklendirebiliriz sunucuya gelen uygulama sorguları var bunu servis kullanıcısı ile, raporlama sorguları var bunu raporlama kullanıcısı ile ve ilgili uygulamanın loglarının sorgulamasını yapan log kullanıcısı bulunmaktadır bu yapıda en öncelikli sorgularımız uygulamanın servis kullanıcısından gelen uygulama sorguları olacaktır bu kullanıcının yapmış olduğu sorgulama ve isteklere daha fazla sistem kaynaklarını kullanım önceliği tanımamız gerekecektir. Diğer kullanıcılardan gelen sorgu ve istekleri ise siz yapı ve ihtiyaç durumu, aciliyet durumu gibi kriterlere göre kendi yapınıza uygulayabilirsiniz.

 

Resource Governor Avantajları

  • Kritik iş yüklerinin ihtiyaç duyduğu kaynaklara erişmesini kolaylık sağlayarak performans artışına yardımcı olur.
  • Belirli sorguların ve kullanıcıların kaynak kullanımını sınırlayarak veri tabanı sisteminin aşırı yüklenmesini önlemeye yardımcı olur.
  • Veri tabanı yöneticilerinin (DBA) kaynak kullanımı takibini ve yönetimini kolaylaştıran özellikler sunar.

 

Resource Governor Dezavantajları

  • Veri tabanı yönetim (DBA) ekiminde deneyimsiz veya sunucu ortamında yeni çalışmaya başlayan bir ekip arkadaşı için nasıl çalıştığını anlamak ve karmaşık yapıyı çözmesi zaman alabilir, yönetimi zorlaştırabilir.
  • Kritik iş yüklerinin kaynağa erişimi anlamında kolaylık sağlayabileceğinden pozitif bir etkisi olarak bahsettik ancak yanlış ihtiyaç tespiti, yanlış konfigürasyonlar kullanıldığında beklediğimiz pozitif etki yerine sorguların ve işlemlerin yürütülmesini yavaşlatabilir.
  • Üçüncü parti ek uygulama veya yazılımlarınızı kullanırken uyumsuzluk problemleri yaşayabilirsiniz.

 

Resource Pool

Server’ın kaynaklarını temsil eder. Belirli bir iş yükü grubuna tahsis edilen kaynakların kontrol edilmesini ve yönetimini sağlar. İş yüklerinin performansını ve kaynak kullanımını optimize etmek için kullanılır. Default olarak iki adet resource pool oluşur bunlar;

  • Internal Pool: SQL Server Engine kendi üzerinde bulunan iç işler için kullanılan pool’ dur.
  • Default Pool: Resource governor’ da ilk tanımlanan user pool’ dur. Herhangi bir user defined resource pool’ a yönlendirilmemiş connection’ lar bu pool’ a yönlendirilir yani SQL Server’ da bir konfigürasyon ayarları ve öncelikli pool tanımlamadıysanız tüm sorgular burada ortak bir havuzda kaynak kullanımını sağlayacak.

 

Şimdi adım adım birkaç örnek yapmaya çalışalım

 1.Adım: Resource Pool Oluşturma

Memory kullanımının maksimim ve minimum olarak set etme örnekleri

CREATE RESOURCE POOL [RaporPool]
WITH
(
MAX_MEMORY_PERCENT=40
--MIN_MEMORY_PERCENT=20 ‘Eğer minimum bir değer set etmek istersek’
)

Bu komut ile SQL Server kullanımında olan memory’ den maksimum %40 kadar kullanım sağlayabilecek veya SQL Server kullanımında olan memory’ den en az %20’ lik bir kaynak ayrılmış olacak.

 

2.Adım: Work Group Oluşturma

CREATE WORKLOAD GROUP [AktarimGroup] USING [AktarimPool] –‘Resource Pool ile Work group atamasını gerçekleştirdik’
GO

ALTER RESOURCE GOVERNOR RECONFIGURE – ‘Yapılandırmaları uygulamasını sağladık’
GO

 

3.Adım: Sınıflandırma Fonksiyonu Oluşturma

CREATE FUNCTION ClassFunc_ResGov() RETURNS SYSNAME WITH SCHEMABINDING
AS
BEGIN 
DECLARE @workload_group sysname;
IF (SUSER_NAME()='AktarimKullanicisi)	--‘Sınıflandırma yapılacak olan kullanıcıyı yazdığımız alan’
    SET @workload_group = 'AktarimGroup';
RETURN @workload_group ;
END

Not: Yapımız gereği birden fazla Resource Governor bulunduruyor olabiliriz bunlar arasında da öncelik belirleyebiliriz aşağıda bunu nasıl yapabileceğimizin bir örneğini bırakıyorum.

ALTER WORKLOAD GROUP [AktarimGroup] WITH (IMPORTANCE=HIGH)

 

4.Adım: Resource Governor Yapılandırma

USE MASTER
GO
ALTER RESOURCE GOVERNOR WITH (CLASSIFIER_FUNCTION = [dbo].[ClassFunc_ResGov])
GO
ALTER RESOURCE GOVERNOR RECONFIGURE

Son olarak bu adımı da uygulayarak 3. adımda oluşturmuş olduğumuz sınıflandırma fonksiyonunun kullanılabilmesi için yapılandırmasını yapıyoruz.

 

Oluşturmuş olduğumuz Workload group’ ta hangi session bulunduğunu aşağıda bırakacağım sorgular ile kontrol sağlayabilirsiniz.

SELECT S.session_id, S.login_name, G.name
FROM SYS.dm_exec_sessions AS s
INNER JOIN SYS.dm_resource_governor_workload_groups AS g ON g.group_id=S.group_id
ORDER BY g.name


SELECT sder.group_id,wg.name, sder.status, sder.session_id, sder.request_id, sder.start_time, sder.command, sder.sql_handle,ST.text
FROM SYS.dm_exec_requests AS sder 
INNER JOIN  SYS.dm_resource_governor_workload_groups AS wg ON wg.group_id=sder.group_id
CROSS APPLY SYS.dm_exec_sql_text(sder.sql_handle) AS st
--WHERE sder.session_id = 
ORDER BY wg.name

 

Oluşturmuş olduğumuz Resource Governor iptal etmek isterseniz aşağıdaki scriptleri kullanabilirsiniz.

ALTER RESOURCE GOVERNOR WITH (CLASSIFIER_FUNCTION = NULL)
GO
ALTER RESOURCE GOVERNOR DISABLE
GO
DROP FUNCTION dbo.ClassFunc_ResGov --'dbo.funtionIsminiz'
GO
DROP WORKLOAD GROUP [AktarimGroup] --'WorkloadGroupIsminiz'
GO
DROP RESOURCE POOL [RaporPool] --'ResourcePoolIsminiz'
GO
ALTER RESOURCE GOVERNOR RECONFIGURE
GO

 

Örnekler, kullanabileceğinizi düşündüğüm bazı örnekleri aşağıya bırakıyorum 🙂

CREATE RESOURCE POOL [OrnekPool]
WITH
(
MAX_DOP=8	--'kullanılacak maxdop ayarını belirler'
GROUP_MAX_REQUESTS = 10	--'WorkloadGroup aynı anda gelen maksimum sorgu limitini belirler'
MAX_CPU_PERCENT=50, MAX_MEMORY_PERCENT=70 --'İki limit belirleme işleminide aynı anda yapabilirim'
MIN_CPU_PERCENT=20
MIN_IOPS_PER_VOLUME = 20 --'minimum olarak ayrılan I/O'
MAX_IOPS_PER_VOLUME = 70 --'maksimum olarak kullanileceği I/O'
)
CREATE WORKLOAD GROUP [MyDatabasePool]
WITH MEMORY_POOL = (TYPE=FIXED, SIZE = 100GB) --'Sabit boyutlu bir bellek oluşturduk'
GO
ALTER DATABASE [MyDatabase] SET WORKLOAD GROUP = [MyDatabasePool]
GO
ALTER WORKLOAD GROUP [MyDatabasePool] WITH MEMORY_LIMIT = 30 PERCENT;
--'Yukarıdaki örnkete ben bir veri tabanının memory' de maksimum %30 kullanım sağlayabilmesini sınırlandırdım siz bunu CPU olarakda değiştirebilirsiniz.'
--'Ayrıca yukarıda oluşturduğumuz sabit boyutlu bellek yerine dinamik bir bellekte tasarlayabilirdik.'
CREATE WORKLOAD GROUP [MyDatabasePool]
WITH MEMORY_POOL = (TYPE=DYNAMIC, MIN_SIZE=10GB, MAX_SIZE=50GB)

Gördüğünüz gibi aslında burada tamamen sizin ortamınıza ve ihtiyaçlarınıza yönelik olarak bu özelliği farklı seçeneklerde kullanabilirsiniz bu kapsamda yardımcı olabilmek adına anlatmaya ve örneklendirmeye çalıştım bir sonraki makalede görüşünceye dek iyi ki varsınız, sevgiler 🙂

Benzer Yazılar

Partition Tabloya Yeni Bir Function ve Scheme Ekleme

SQL Server 1 saat önce

Bazen partition yapılmış bir tabloya partition yapısını bozulmaması için yeni bir file group eklenme gereği duyulabilir. Bunun için elimizde bulunan partition scheme ve partition function yapısının düzenlenmesi gerekmektedir. Bir veritabanı altındaki partition yapılmış tabloyu aşağıdaki komut ile görebiliriz. use [PartSamp] SELECT OBJECT_NAME(si.object_id) AS object_name ,pf.NAME AS pf_name ,ps.NAME AS partition_scheme_name ,p.partition_number ,ds.NAME AS partition_filegroup ,rv.value AS range_value ,( CASE pf.boundary_value_on_right WHEN 0 THEN ‘RAGE_LEFT’ ELSE ‘RANGE_RIGHT’ END ) AS range_direction ,SUM(CASE WHEN si.index_id IN ( 1 ,0 ) THEN p.rows ELSE 0 END) AS num_rows FROM sys.destination_data_spaces AS dds INNER JOIN sys.data_spaces AS ds ON dds.data_space_id = ds.data_space_id INNER JOIN sys.partition_schemes AS ps ON dds.partition_scheme_id = ps.data_space_id INNER JOIN sys.partition_functions AS pf ON ps.function_id = pf.function_id LEFT JOIN sys.partition_range_values AS rv ON pf.function_id = rv.function_id AND dds.destination_id = CASE pf.boundary_value_on_right WHEN 0 THEN rv.boundary_id ELSE rv.boundary_id + 1 END LEFT JOIN sys.indexes AS si ON dds.partition_scheme_id = si.data_space_id LEFT JOIN […]

Windows Servis Aracılığıyla Alınan DB’nin Tablosunu Partition Yapma

SQL Server 2 saat önce

Bu makalede gerçek sistemde başka bir kurumdan servisle alınan bir veritabanında partition yapılması uygun görülen bir tablonun belirtilen kolununun partition yapılması amaçlanmaktadır.  Şimdi işlemlerimizi uygulamalı bir şekilde gerçekleştirelim. Aşağıdaki resimde görüldüğü gibi veritabanımızda herhangi bir filegroup yapısının olmadığı bunun için partition yapacağımız tablo için database üzerinde filegroupları oluşturuyorum data file ile birlikte. Not olarak şunu geçmek istiyorum partition yapılacak kolunun not null olma şartı gerekmektedir. Yoksa tablomuzu partition oluşturacağımız zaman hata vermektedir. Gerçek sistemde yapmadan önce test veritabanında yapıyorum. Şimdi yapacağımız adımlar canlı sistemdeki veritabanına servis aracılığıyla veriler gelmekte bu veriler sonradan update edilmediği için bu yöntem yapılır. Adım olarak canlı veritabanımızda partition yapılacak kolundaki tarihleri gözlemleyerek filegroup’lar ve data file’lar ekliyorum. Tarih kolununu gözlemlediğimde 2021 yılı öncesi veriler ve ondan sonra 21-22,22-23 bu şekilde mantık çerçevesinde olması için ilk filegroup ismini FG2020 yapıyorum bu şekilde 7 tane filegroup ekleme işlemlerine geçiyorum. ALTER DATABASE [PartSamp] ADD FILEGROUP [FG2020] go ALTER […]

SQL Server Trace Flag(Startup Parameters) Nedir? Ne için kullanılır ? Yaygın olarak kullanılan Trace Flaglar Nelerdir?

SQL Server 1 hafta önce

Bu makalede, SQL Server Trace Flag ne olduğunu, nasıl kullanıldığını ve bazı yaygın senaryolarda nasıl faydalı olabileceğini inceleyeceğiz. Trace Flag Nedir ? SQL Server’ın davranışını değiştiren ve çeşitli senaryolarda performansı artıran veya hata ayıklama sürecini kolaylaştıran özel ayarlar olarak tanımlanabilir. Kullanım amaçları genel anlamda kriz anında ihtiyaçlara göre Trace Flags’ler eklenip problemi çözmeye yönelik işlemler yapılabilir. SQL Server Trace Flag seçerken dikkatli olmak önemlidir. Yanlış bir Trace flag etkinleştirilmesi, beklenmedik davranış değişikliklerine veya performans sorunlarına neden olabilir. Bu nedenle, her Trace Flag etkilerini ve kullanım senaryolarını bilmek önemlidir. Trace Flag etkinleştirildikten sonra sistem üzerindeki etkilerini izlemek ve değerlendirmek de önemlidir. Trace Flag nasıl aktif edebiliriz. Bağzı Trace Flag’ ler Service Restart edildikten sonra devreye girecektir. Aktif etmek için; SQL Server Configuration Manager/ SQL Server Services/ SQL Server (InstanceName)   Instance’a sağ tıklayıp Properties diyoruz ve Startup Parameters kısmına geliyoruz burada 3 tane System tarafından Default olarak gelen Trace Flag’ler bulunmaktadır. […]

0 Yorum

Yorum Yaz

Rastgele