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

SQL SERVER RIGHT-LEFT PARTITION

SQL Server 5 gün önce

SQL Server’da partitioning, büyük veritabanı tablolarını daha yönetilebilir ve performanslı hale getirmek amacıyla kullanılan bir tekniktir. Bu teknik, tablonun verilerini fiziksel olarak değil, mantıksal olarak parçalara ayırır. Veriler, belirli bir partition function ve partition scheme kullanılarak farklı bölümlere yönlendirilir. Partitioning, özellikle büyük veri kümeleriyle çalışan veri tabanlarında sorgu performansını artırır ve veri yönetimini kolaylaştırır. Partition Function ve Partition Scheme nedir? Partition Function: Verilerin hangi kriterlere göre bölüneceğini belirler. Örneğin, bir tarih aralığına göre verileri ayırmak. Partition Scheme: Verilerin hangi filegroup’larda depolanacağını belirler.   Örnek olarak Range LEFT ve Range RIGHT olmak üzere iki ayrı tabloda partition nasıl yapılır sizlere göstereceğim. İlk olarak Range LEFT olan partition yapısından başlayacağım. Öncelikle Veri tabanıma yeni filegroup ve file ekliyorum Şimdi sıra FUNCTION ve SCHEME oluşturmakta ben tablomu yıllık olarak partition yaptım sizler ihtiyaçlarınız doğrultusunda aylık,günlük vs yapabilirsiniz. LEFT partition dediğimiz olay vermiş olduğunuz tarih aralığına eşit bir veri geldiğinde bu veriyi solundaki partition […]

Veritabanı Recovery Pending Durumu ve Düzeltme Seçenekleri

SQL Server 2 hafta önce

İçindekilerVeritabanı Recovery Pending Durumu Nedir?Veritabanı Neden Recover Pending Duruma Düşer?Recovery Pending Durumu Nasıl Çözülür?SonuçKaynaklarVeritabanı Recovery Pending Durumu Nedir? SQL Server’da veritabanları bazı nedenlere bağlı olarak “Recovery Pending” (Kurtarma Bekleme)  moduna geçebilir. Veritabanın düzgün bir şekilde kapatılmaması, eksik veya bozuk log dosyaları, disk depolama sorunları, sistemde yaşanan anormal şekilde çökmeler veya MS SQL Server’daki hatalar bu duruma sebep olabilir. Recovery durumu, aslında veritabanını tekrar kullanılabilir hale getirmek için bir kurtarma işlemi yürüttüğünü ifade eder ve üç aşamadan oluşur; Analysis (Analiz): Transaction log incelemesi yapılması ve işlemlerin tamamlanma (Commit) durumunun kontrol edilmesi, Redo (Yeniden İşleme): Tamamlanmış (Commit) ancak henüz diske yazılamamış olan işlemlerin yeniden işlenmesi, Undo (Geri Alma): Başlamış (Begin) ancak tamamlanmamış (Commit) işlemlerin  geri alınmasıdır.   Veritabanı Neden Recover Pending Duruma Düşer? SQL Server Restart Süreci SQL Server servisi restart edildiğinde üzerinde bulunan tüm veritabanları tutarlılığın sağlanması için otomatik olarak recovery moduna girer ve redo/undo işlemleri sürecince devam eder. Ani Sistem […]

SQL Server DMV ve DMF – 6

SQL Server 2 hafta önce

Bu yazımızda DMV ve DMF Serimizin 6.sına devam edeceğiz. Bir önceki seride Memory’ye ilişkin DMV ve DMF’leri ele almıştık. Bu yazıda Memory konusunda devam edeceğiz. SQL server’da Memory kavramı en önemli kavramlardan biridir. Özellikle tüm transaction işlemlerinin önce Buffer sonra disk üzerinden devam ettiğini düşünürsek buffer’ın oynadığı kritik rolü daha iyi anlayabiliriz. Bu yazıda Memory’nin durumunu ve monitör edilmesine bakacağız. Özellikle Performans sorunlarında memory konusunda sorun yaşandığı durumda nasıl okumak gerektiği önemli rol oynamaktadır. Hangi database’de, hangi tablo’da sorun yaşandığına ilişkin bilgilere bu paylaşım sonrasında görebileceğiz. SQL Server’ın Memory kullanım durumunu incelediğimde; select physical_memory_in_use_kb/1048576.0 AS ‘physical_memory_in_use (GB)’, locked_page_allocations_kb/1048576.0 AS ‘locked_page_allocations (GB)’, virtual_address_space_committed_kb/1048576.0 AS ‘virtual_address_space_committed (GB)’, available_commit_limit_kb/1048576.0 AS ‘available_commit_limit (GB)’, page_fault_count as ‘page_fault_count’ from  sys.dm_os_process_memory; Görsel – 1   Physical_memory_in_use: Kullanımda olan Fiziksel Memory miktarını gösterir. locked_page_allocations: Memory’de lock’lanmış olan Page’lerin miktarını belirtir. virtual_address_space_contained: SQL Server VAS(Virtual Adress Space) için ayrılan miktarı belirtir. available_commit_limit: SQL Server tarafından kullanılabilecek Memory Miktarını gösterir. […]

0 Yorum

Yorum Yaz

Rastgele