MSSQL Server’a Gelen Transaction Sayısını Bulma

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

Transaction sayısını bulmak için kullanacağımız sql betiği sys.dm_os_performance_counters  ifadesidir.

select*from sys.dm_os_performance_counters

A veritabanı üzerinde bazı işlemler yapıldığında cntr_value değerinin arttığı gözlemleniyor. Bu da demek oluyor ki bu ifadesinin ilk ve son değeri bizim veritabanına 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 yardımıyla herhangi bir veritabanı üzerinden 10 saniyelik bir arada ne kadar Transaction geldiğini bulabiliriz.

DECLARE @First INT
DECLARE @Second INT
SELECT @First = cntr_value
FROM sys.dm_os_performance_counters
WHERE counter_name = 'Transactions/sec'
AND instance_name = 'Db_Name';
-- Following is the delay
WAITFOR DELAY '00:00:10'
-- Second PASS
SELECT @Second = cntr_value
FROM sys.dm_os_performance_counters
WHERE counter_name = 'Transactions/sec'
AND instance_name = 'Db_Name';
SELECT (@Second - @First) 'TotalTransactions'
GO

Aşağıdaki komut ile de bir instance altındaki tüm veritabanlarının  10 saniye arayla toplam Transaction sayısını bulabiliriz. 

-- First PASS
DECLARE @First BIGINT;
DECLARE @Second BIGINT;

-- Get the first value of Transactions/sec
SELECT @First = cntr_value
FROM sys.dm_os_performance_counters
WHERE counter_name = 'Transactions/sec'
AND instance_name = '_Total';

-- Wait for a specific delay (5 seconds in this case)
WAITFOR DELAY '00:00:05';

-- Second PASS
-- Get the second value after the delay
SELECT @Second = cntr_value
FROM sys.dm_os_performance_counters
WHERE counter_name = 'Transactions/sec'
AND instance_name = '_Total';

-- Calculate the difference (Total Transactions in 5 seconds)
SELECT (@Second - @First) AS TotalTransactions;
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 sıralı olmadığı için heap yapısında veriler rastgele atılabilmektedir.

CREATE TABLE [dbo].[TransactionCount](
	[id] [bigint] IDENTITY(1,1) NOT NULL,
	[Tarih] [datetime] NULL,
	[TransactionsCount] [bigint] NULL,
 CONSTRAINT [PK_TransactionCount] PRIMARY KEY CLUSTERED 
(
	[id] ASC
) ON [PRIMARY]

-----
DECLARE @First BIGINT;
DECLARE @Second BIGINT;
DECLARE @Sonuc BIGINT;
Declare @Delete datetime= getdate()-7;
delete from TransactionCount where Tarih < @Delete

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

WAITFOR DELAY '00:00:05';

SELECT @Second = cntr_value
FROM sys.dm_os_performance_counters
WHERE counter_name = 'Transactions/sec'
AND instance_name = '_Total';

set @Sonuc=(@Second - @First)  
insert into TransactionCount values(getdate(),@Sonuc)
GO

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

SELECT 
      CAST([Tarih] AS DATE) AS TARIH
      ,SUM([TransactionsCount]) AS TOPLAM_TRANSACTION
  FROM [DBAMON].[dbo].[TransactionCount]
  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 Transactions 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