21 Nis by NURULLAH ÇAKIR

Veritabanlarına Gelen Transaction Sayısı

Veritabanına gelen transaction sayısı veritabanının ne kadar yoğun kullanıldığını gösteren bir parametredir. Third party bazı uygulamalar transaction sayısı grafiğini verselerde her kurum para verip bu uygulamaları satın almayabilir. Eğer sisteminizdeki transaction sayılarını kendiniz manual bulmak istiyorsanız bu makale işinize yarayacaktır.

Aşağıdaki script yardımıyla, en son servis restart işleminden sonra veritabanınıza gelen toplam transaction sayısını bulabilirsiniz.

select instance_name 'Veritabanı Adı', cntr_value 'Toplam Transaction Sayısı' 
from sys.dm_os_performance_counters WHERE counter_name = 'Transactions/sec' AND 
instance_name = 'Transaction Sayısını Bulmak İstediğinizVeritabanı Adını Buraya Yazmalısınız';

 

Yukardaki script’i kullanarak en son restart sonrasında veritabanına ne kadar transaction geldiğini bulabilirsiniz. Böylece en son restart tarihini sql server log’larından bakarak bulup günlük ortalama transaction sayısını hesaplayabilirsiniz.

 

Aşağıdaki script yardımıyla da bir instance üzerindeki tüm veritabanlarına en son restart sonrasında gelen transaction sayılarına ait listeyi bulabilirsiniz.

DECLARE @VeritabaniAdi VARCHAR(250)
create table #TempTablo (veritabaniadi varchar(250),TransactionSayisi bigint)

/*Cursor'a bir isim veriyoruz*/

DECLARE cursordbnames CURSOR
FOR

/*Cursor'ın dolaşacağı kayıt kümesini belirten select cümleceği*/

SELECT name FROM sys.sysdatabases where dbid>4
OPEN cursordbnames
FETCH NEXT FROM cursordbnames INTO @VeritabaniAdi

/*WHILE @@FETCH_STATUS=0 Cursorda dolaşacak kayıt kalmayana kadar bir sonraki kayda geçerek cursor'ı döndürmeye devam et demek*/

WHILE @@FETCH_STATUS =0
BEGIN    
Insert Into #TempTablo(veritabaniadi, TransactionSayisi)
select instance_name 'Veritabanı Adı', cntr_value 'Toplam Transaction Sayısı' from  sys.dm_os_performance_counters
WHERE counter_name = 'Transactions/sec' AND instance_name = @VeritabaniAdi;
 FETCH NEXT FROM cursordbnames INTO @VeritabaniAdi
END                

/*CLOSE ve DEALLOCATE komutlatı ile Cursor'ı kapatıyoruz*/

CLOSE cursordbnames
DEALLOCATE cursordbnames


Select * From #TempTablo order by TransactionSayisi Desc
DROP TABLE #TempTablo

 

 

Belirli bir süre aralığındaki transaction sayısını da hesaplayabilirsiniz. Aşağıdaki script ile de  bir veritabanına belirli bir süre içersinde(script’te 1 dakika olarak set ettik. Siz isterseniz bu süreyi uzatabilirsiniz) gelen transaction’ı hesaplayalım.

 

DECLARE @Baslangic BIGINT
DECLARE @Bitis BIGINT
SELECT @Baslangic = cntr_value
FROM sys.dm_os_performance_counters
WHERE counter_name = 'Transactions/sec'
AND instance_name = 'Veritabanı Adını Buraya Yazmalısınız';

WAITFOR DELAY '00:01:00'

SELECT @Bitis = cntr_value
FROM sys.dm_os_performance_counters
WHERE counter_name = 'Transactions/sec'
AND instance_name = 'Veritabanı Adını Buraya Yazmalısınız';
SELECT (@Bitis - @Baslangic) '1 Dakikada Gelen Toplam Transaction Sayısı'
GO

Instance üzerindeki tüm veritabanlarına belirli bir süre aralığında gelen transaction sayısını hesaplamak içinde aşağıdaki script’i kullanabilirsiniz.

DECLARE @VeritabaniAdi VARCHAR(250)
create table #TempTablo (veritabaniadi varchar(250),TransactionSayisi bigint)

/*Cursor'a bir isim veriyoruz*/

DECLARE cursordbnames CURSOR
FOR

/*Cursor'ın dolaşacağı kayıt kümesini belirten select cümleceği*/

SELECT name FROM sys.sysdatabases where dbid>4
OPEN cursordbnames
FETCH NEXT FROM cursordbnames INTO @VeritabaniAdi

/*WHILE @@FETCH_STATUS=0 Cursorda dolaşacak kayıt kalmayana kadar bir sonraki kayda geçerek cursor'ı döndürmeye devam et demek*/

WHILE @@FETCH_STATUS =0
BEGIN    
Insert Into #TempTablo(veritabaniadi, TransactionSayisi)
select instance_name 'Veritabanı Adı', cntr_value 'Toplam Transaction Sayısı' from  sys.dm_os_performance_counters
WHERE counter_name = 'Transactions/sec' AND instance_name = @VeritabaniAdi;
 FETCH NEXT FROM cursordbnames INTO @VeritabaniAdi
END                

/*CLOSE ve DEALLOCATE komutlatı ile Cursor'ı kapatıyoruz*/

CLOSE cursordbnames
DEALLOCATE cursordbnames

WAITFOR DELAY '00:01:00'

create table #TempTablo2 (veritabaniadi varchar(250),TransactionSayisi bigint)

/*Cursor'a bir isim veriyoruz*/

DECLARE cursordbnames CURSOR
FOR

/*Cursor'ın dolaşacağı kayıt kümesini belirten select cümleceği*/

SELECT name FROM sys.sysdatabases where dbid>4
OPEN cursordbnames
FETCH NEXT FROM cursordbnames INTO @VeritabaniAdi

/*WHILE @@FETCH_STATUS=0 Cursorda dolaşacak kayıt kalmayana kadar bir sonraki kayda geçerek cursor'ı döndürmeye devam et demek*/

WHILE @@FETCH_STATUS =0
BEGIN    
Insert Into #TempTablo2(veritabaniadi, TransactionSayisi)
select instance_name 'Veritabanı Adı', cntr_value 'Toplam Transaction Sayısı' from  sys.dm_os_performance_counters
WHERE counter_name = 'Transactions/sec' AND instance_name = @VeritabaniAdi;
 FETCH NEXT FROM cursordbnames INTO @VeritabaniAdi
END                
/*CLOSE ve DEALLOCATE komutlatı ile Cursor'ı kapatıyoruz*/

CLOSE cursordbnames
DEALLOCATE cursordbnames


select tmp1.veritabaniadi,tmp2.TransactionSayisi-tmp1.TransactionSayisi 'Belirlenen Sürede Gelen Transaction Sayıları'

from #TempTablo tmp1 INNER JOIN #TempTablo2 tmp2 ON tmp1.veritabaniadi=tmp2.veritabaniadi

order by tmp2.TransactionSayisi-tmp1.TransactionSayisi desc


DROP TABLE #TempTablo
DROP TABLE #TempTablo2

 

Loading

Bir yanıt yazın

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