Veritabanı yönetiminde sistemin sağlığını anlamak, sadece “çalışıyor mu?” sorusuna yanıt vermekten öte; darboğazları önceden tespit etmeyi gerektirir. SQL Server, performans sayaçları (Performance Counters) aracılığıyla bellek kullanımı ve işlem yoğunluğu hakkında hayati bilgiler sunar. Bu makalede, kritik performans göstergelerinin nasıl kayıt altına alındığını ve bu değerlerin ne ifade ettiğini inceleyeceğiz.
Performans izleme sürecinin ilk adımı, dinamik yönetim görünümlerinden (DMV) gelen verileri kalıcı dbo.OSCounters tablosuna kaydetmektedir.
USE [DBAMON]
GO
CREATE TABLE [dbo].[OSCounters](
[counter_name] [varchar](128) NULL,
[counter_value] [bigint] NULL,
[counter_delta] [bigint] NULL,
[CaptureDate] [datetime] NULL
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[OSCounters] ADD DEFAULT (getdate()) FOR [CaptureDate]
GO
İlgili veritabanı altında tablomuzu oluşturmuş olduk.

Sunucu üzerinde bulunan Performance Counter değerlerini aşağıdaki procedure yardımıyla toplayıp yukarıda oluşturduğumuz tabloya kaydetme işlemi yapılır.
USE [DBAMON]
GO
CREATE PROCEDURE [dbo].[CaptureOSCounters]
AS
DECLARE
@cntr_name varchar(128),
@cntr_val bigint,
@log_date datetime,
@val_0 bigint
BEGIN
BEGIN TRY
SELECT RTRIM([object_name]) + N':' + RTRIM([counter_name]) + N':' + RTRIM([instance_name]) cntr_name,
[cntr_value], GETDATE() log_date
into #tmp
FROM sys.dm_os_performance_counters
WHERE [counter_name] IN ( N'Page life expectancy',
N'Buffer cache hit ratio',N'Buffer cache hit ratio base',
N'Lazy writes/sec', N'Page reads/sec',
N'Page writes/sec', N'Free Pages',
N'Free list stalls/sec',
N'User Connections',
N'Lock Waits/sec',
N'Number of Deadlocks/sec',
N'Transactions/sec',
N'Forwarded Records/sec',
N'Index Searches/sec',
N'Full Scans/sec',
N'Batch Requests/sec',
N'SQL Compilations/sec',
N'SQL Re-Compilations/sec',
N'Total Server Memory (KB)',
N'Target Server Memory (KB)',
N'Memory Grants Pending',
N'Log write waits',
N'Network IO waits',
N'Page IO latch waits',
N'Non-Page latch waits',
N'Page latch waits',
N'Wait for the worker',
N'Page lookups/sec',
N'Checkpoint pages/sec',
N'Latch Waits/sec' );
declare tmp cursor for select * from #tmp
open tmp
fetch next from tmp into @cntr_name, @cntr_val, @log_date
while @@fetch_status=0
begin
select top 1 @val_0=isnull(counter_value,0)
from DBAMon.dbo.OSCounters
where counter_name = @cntr_name order by CaptureDate desc;
insert into DBAMon.dbo.OSCounters values(@cntr_name, @cntr_val, @cntr_val - @val_0,@log_date);
fetch next from tmp into @cntr_name, @cntr_val, @log_date;
end;
close tmp;
deallocate tmp;
drop table #tmp;
END TRY
begin catch
declare
@error_message nvarchar(4000),
@error_number int,
@error_state int,
@error_severity int,
@error_procedure nvarchar(126),
@error_line int
select @error_number = error_number()
, @error_state = error_state()
, @error_severity = error_severity()
, @error_procedure = error_procedure()
, @error_line = error_line()
set @error_message = left('CaptureCpuUsage Error Message: ' + error_message(), 4000)
raiserror(700016, @error_severity, @error_state, @error_message)
exec [dbo].[Capture_Error] @error_message,
@error_number,
@error_state,
@error_severity,
@error_procedure,
@error_line
end catch
END
Veritabanı altında stored procedure oluşturuldu.

Oluşturulan procedure belirli aralıklarla performans değerlerini tabloya kaydetme işlemleri için bir job oluşturup belirli aralıklarla CaptureOSCounters procedure yapısının çalıştırılması gerekmektedir.
EXECUTE [DBAMON].[dbo].[CaptureOSCounters] ;

Job’ımız oluşturulup belirli aralıklarla çalıştırılır. Bu sayede procedure yapısında belirtilen tüm performans metriklerini kaydetmiş oluruz.

İkinci veri setinde odaklandığımız Transactions/sec metriği, sistemin gerçek zamanlı iş yükünü temsil eder. Özellikle “PasaportIslemleri” veya “KAMP” gibi spesifik veritabanları üzerinden alınan bu değerler, uygulama bazlı yoğunluk artışlarını ve veritabanı üzerindeki anlık baskıyı gözlemlememizi sağlar.

Performans sayaçlarını düzenli aralıklarla bir tabloya kaydetmek, sadece anlık sorunları çözmekle kalmaz; aynı zamanda geçmişe dönük trend analizi yapılmasına olanak tanır. Elde edilen counter_delta ve counter_value verileri, sistemin kapasite planlaması ve optimizasyon ihtiyaçları için en güvenilir rehberdir.
Başka makalede görüşmek dileğiyle..
İyilikler için karşılık beklemeyin. İnsan-9
