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