MSSQL Server’a Gelen Batch Requests/sec Sayısını Bulma

Bu makalede sql server üzerinde bulunan veritabanı veya veritabanlarına anlık veya belirli bir zaman aralığında ne kadar Batch Requests geldiğini görmüş olacağız. Bu sonuç ile veritabanımız üzerinde yoğunluğu görüp bazı önlemler alabiliriz.

Batch Requests/sec, SQL Server’a saniyede gönderilen SQL komut grubu (batch) sayısını gösterir. Uygulama, SQL Server’a bir sorgu gönderir. Bu sorgu tek komut olabilir ya da birden fazla komuttan oluşan batch olabilir. SQL Server bunu işler. Sayaç da saniyede kaç tane batch geldiğini ölçer. Bu değer, sunucunun ne kadar yoğun çalıştığını anlamak için kullanılır.

Yüksek Batch Requests/sec genelde Çok kullanıcı var. Çok sorgu çalışıyor. Sistem aktif kullanılıyor. Düşük Batch Requests/sec şunları gösterebilir. Kullanıcı yok / sistem boş, Uygulama az sorgu atıyor. Ya da sistem kilitlenmiş olabilir.(blocking) Bu yüzden tek başına yorumlanmaz.

Bu ifadesinin ilk ve son değeri bizim instance’a gelen toplam transaction sayısını görmemize sebep olacaktır. Counter_name kısmında ne gibi sonuçlar dönmek istiyorsak o ifadeyi yazıyoruz.

Aşağıdaki komut ile de bir instance altındaki tüm Batch Requests/sec değerlerini belirli bir saniye altında görebiliriz. Batch Requests/sec database bazlı oluşturulmaz. İnstance bazlı oluşturulmaktadır.

DECLARE @First BIGINT
DECLARE @Second BIGINT

SELECT @First = cntr_value
FROM sys.dm_os_performance_counters
WHERE counter_name = 'Batch Requests/sec'
AND instance_name = '';

-- Following is the delay
WAITFOR DELAY '00:00:05'

-- Second PASS
SELECT @Second = cntr_value
FROM sys.dm_os_performance_counters
WHERE counter_name = 'Batch Requests/sec'
AND instance_name = '';

SELECT (@Second - @First) AS TotalBatchRequests
GO

Not: Bazı sunucularda değişkenlerin büyüklüğü artmakta, bunun için İnt değişkeninin bigint değişkenine dönüşmesi gerekmektedir. Daha detaylı bilgi için ilgili makaleyi okumalısınız.

Bir tablo altına kaydedip belirli aralıklarla çalışan bir job oluşturulur. Bu sayede yoğunluğu görebiliriz. Tablo muzu oluştururken daha sonra tablomuzda hızlı sorgu çekilmesi index oluşturuyoruz.

USE [DBAMON]
GO
CREATE TABLE [dbo].[BatchRequestsCount](
	[id] [bigint] IDENTITY(1,1) NOT NULL,
	[Tarih] [datetime] NULL,
	[TotalBatchRequests] [bigint] NULL,
 CONSTRAINT [PK_BatchRequestsCount] PRIMARY KEY CLUSTERED 
(
	[id] ASC
)WITH ( FILLFACTOR = 90) ON [PRIMARY]
) ON [PRIMARY]
GO

Hızlı sonuc alabilmek için oluşturulan tablomuza index oluşturulur.

USE [DBAMON]
GO
CREATE NONCLUSTERED INDEX [IX-BatchRequestsCount_Tarih] ON [dbo].[BatchRequestsCount]
(
	[Tarih] ASC
)
CREATE NONCLUSTERED INDEX [IX-BatchRequestsCount_TotalBatchRequests] ON [dbo].[BatchRequestsCount]
(
	[TotalBatchRequests] ASC
)
GO

Job’ımızın ekleyeceğimiz kodumuzu ekleme işlemi yapalım. Bu oluşturulan job’a belirli bir schedule set edilerek belirli aralıklarla çalıştırılabilir. İlgili script içerisine 30 gün önceki değerler silinmektedir.

DECLARE @First BIGINT
DECLARE @Second BIGINT
DECLARE @Sonuc BIGINT
Declare @Delete datetime= getdate()-30;
delete from DBAMON.dbo.BatchRequestsCount where Tarih < @Delete

SELECT @First = cntr_value
FROM sys.dm_os_performance_counters
WHERE counter_name = 'Batch Requests/sec'
AND instance_name = '';

-- Following is the delay
WAITFOR DELAY '00:00:01'

-- Second PASS
SELECT @Second = cntr_value
FROM sys.dm_os_performance_counters
WHERE counter_name = 'Batch Requests/sec'
AND instance_name = '';

set @Sonuc=@Second - @First 
insert into DBAMON.dbo.BatchRequestsCount values(getdate(),@Sonuc)

GO

Jobımızı oluşturduktan sonra aşağıdaki komut ile anlık Total Batch Request Count değerini görebiliriz.

SELECT TOP (1000) [id]
      ,[Tarih]
      ,[TotalBatchRequests]
  FROM [DBAMON].[dbo].[BatchRequestsCount]

Aşağıdaki sorgu ile gün bazında ne kadar Batch Requests geldiğini bulabiliriz.

  SELECT 
      CAST([Tarih] AS DATE) AS TARIH
      ,SUM([TotalBatchRequests]) AS TOPLAM_TRANSACTION
  FROM [DBAMON].[dbo].[BatchRequestsCount]
  --where CAST([Tarih] AS DATE)>='2025-09-01'
group by CAST([Tarih] AS DATE)
order by CAST([Tarih] AS DATE)

Bu makalede Sql Server’a gelen toplam Batch Requests sayısını bulabiliriz.

Başka bir makalede görüşmek dileğiyle..

Onlar – “Zekatlarını Hakkıyla Verirler. ” Bakara / 177

Author: Yunus YÜCEL

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir