SQL Uzun Süren Etkinliklerin İzlenmesi
SQL Server'da uzun süren sorguları loglama işlemi, genellikle SQL Server Profiler, Extended Events veya DMV'ler (Dynamic Management Views) kullanılarak yapılır.
SQL Server Profiler, kullanıcı etkinliklerini ve SQL Server olaylarını gerçek zamanlı olarak izlemek için kullanılan bir araçtır. Bu aracı kullanarak uzun süren sorguları yakalayabilirsiniz.
Extended Events Kullanarak Loglamayı Anlatacağım
Extended Events, SQL Server'ın hafif izleme ve sistem izleme mekanizmasıdır ve özellikle uzun süren sorguları izlemek için çok uygundur.
- SQL Server Management Studio (SSMS)'da Object Explorer'ı açın.
"Management" kısmına sağ tıklayıp "New Session Wizard"ı seçin.
Yeni bir Extended Events oturumu oluşturun ve "Do not show this page again" seçeneğini işaretleyin.


"Events" sayfasında, "rpc_completed" ve "sql_batch_completed" olaylarını ekleyin.






Yönetim db açalım
Aşağıdaki SP de eteded evett kaydetmemiz lazım bu görselin gelmesi için
oş bir new query açıp aşağıdaki kodu çalıştırmamız lazım
USE [ZCheckDB]
GO
/****** Object: StoredProcedure [dbo].[GetLongQuery2] Script Date: 13.12.2023 15:52:12 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[GetLongQuery2]
@StartDate DATETIME,
@EndDate DATETIME
AS
BEGIN
SET NOCOUNT ON;
SELECT DATEADD(mi, DATEDIFF(mi, GETUTCDATE(), CURRENT_TIMESTAMP),
xevents.event_data.value('(event/@timestamp)[1]', 'datetime2')) AS [EventTime] ,
xevents.event_data.value('(event/action[@name="database_name"]/value)[1]', 'nvarchar(max)') AS [DatabaseName],
xevents.event_data.value('(event/data[@name="duration"]/value)[1]', 'bigint') /1000 AS [DurationMS],
xevents.event_data.value('(event/data[@name="cpu_time"]/value)[1]', 'bigint') AS [CPUTimeMs],
xevents.event_data.value('(event/data[@name="logical_reads"]/value)[1]', 'bigint') AS [LogicalReads],
xevents.event_data.value('(event/data[@name="row_count"]/value)[1]', 'bigint') AS [RowCount],
xevents.event_data.value('(event/data[@name="statement"]/value)[1]', 'nvarchar(max)') AS [Statement]
FROM sys.fn_xe_file_target_read_file('C:\SQL Monitoring\LongQuery_0_133469452731440000.xel',null, null, null)
CROSS APPLY (select CAST(event_data as XML) as event_data) as xevents
WHERE DATEADD(mi, DATEDIFF(mi, GETUTCDATE(), CURRENT_TIMESTAMP),
xevents.event_data.value('(event/@timestamp)[1]', 'datetime2')) >=@StartDate
AND
DATEADD(mi, DATEDIFF(mi, GETUTCDATE(), CURRENT_TIMESTAMP),
xevents.event_data.value('(event/@timestamp)[1]', 'datetime2')) <=@EndDate;
END;
GO
-----------------------
Aşağıdaki kodu şu şekilde düzenleyiniz;

"Filter (Predicate)" bölümünde, "duration" üzerinden filtreleme yapın ve belirli bir süreden (örneğin, 10.000.000 nanosaniye = 10 saniye) daha uzun süren sorgular için filtre uygulayın.

Sonrasında longquery sessions start veriyoruz.
Uzun süren loglamasını yaptığımız sorguları aşağıdaki kod ile görüntüleyebilirsiniz;
EXEC ZCheckDB.dbo.GetLongQuery
Tarih kısıtlaması;
exec GetLongQuery2 '2024-02-06 09:00', '2024-02-06 14:00'