SQL Server’ın etkili bir şekilde izlenmesi ve bakımı, sağlıklı bir veritabanı ortamını yönetmenin kritik bileşenleridir. Sağlam ve karmaşık bir veritabanı yönetim sistemi olan SQL Server, optimum performans, güvenlik ve güvenilirlik sağlamak için sürekli bakım ve izleme gerektirir.
Bu yazıda özetlenen yöntemler ile SQL Server’ın izlenmesi ve bakımı için veritabanı yöneticilerinin (DBA’lar) ve BT uzmanlarının SQL ortamlarını etkin şekilde yönetmelerine yardımcı olmaya çalışacağım
Bölüm-1 CPU Monitoring ( İşlemci Kullanımı İzleme )
SQL Server’da CPUUsage Monitoring, SQL Server işlemlerinin CPU kullanımını izlemeyi içeren bir işlemdir. Bu, SQL Server örneğinin performansını düşürebilecek aşırı CPU kaynağı tüketen sorguların veya işlemlerin belirlenmesine yardımcı olur. Veritabanı yöneticileri, CPU kullanımını izleyerek sunucunun verimliliğini korumak için yoğun kaynak kullanan süreçleri belirleyebilir ve optimize edebilir.
Nasıl Yapılır?
SQL Server’da CPU kullanımını izlemek için:
1. Sql Management Studio’yu ( SSMS) açın ve ilgili instance’a bağlanın :
2. New Query diyerek sorgu penceresini açın :
Sorgu:
SELECT r.session_id, r.cpu_time AS CPUTime_MS, r.total_elapsed_time AS TotalElapsedTime_MS, r.logical_reads AS LogicalReads, r.reads AS PhysicalReads, r.writes AS Writes, st.text AS QueryText
FROM sys.dm_exec_requests r
JOIN sys.dm_exec_sessions s ON r.session_id = s.session_id
CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) AS st
ORDER BY r.cpu_time DESC;
Kodu Açıklayalım :
Session_id: SQL Server instance’ına o anda bağlı olan her oturum için benzersiz tanımlayıcı. Hangi oturumun CPU kaynaklarını tükettiğini izlemenizi sağlar.
CPUTime_MS: Oturum tarafından milisaniye cinsinden tüketilen toplam CPU süresi. Daha yüksek değerler daha fazla CPU kullanımını gösterir.
TotalElapsedTime_MS: Sorgunun milisaniye cinsinden çalıştığı toplam süre. Bu, uzun süre çalışan bir sorgunun yüksek CPU kullanımına katkıda bulunup bulunmadığını anlamaya yardımcı olabilir.
LogicalReads: Oturum tarafından gerçekleştirilen mantıksal okuma işlemlerinin sayısı. Yüksek mantıksal okumalar, oturumun büyük miktarda veri işlediğini gösterebilir.
PhysicalReads: Oturum tarafından gerçekleştirilen fiziksel okuma işlemlerinin sayısı. Yüksek fiziksel okumalar, sorgunun diskten veri getirdiğini gösterebilir ve bu da CPU kullanımına artı getirir.
Writes: Oturum tarafından gerçekleştirilen yazma işlemlerinin sayısı. Yazma işlemlerinin izlenmesi, oturumun ne kadar veriyi değiştirdiğinin anlaşılmasına yardımcı olabilir.
QueryText: Oturum tarafından yürütülen gerçek SQL metni. Bu, CPU yükünden hangi sorguların sorumlu olduğunu belirlemeye yardımcı olur.
Çıktı :
Bu yapı, SQL Server’da CPU kullanımının nasıl izleneceği ve yorumlanacağına dair kapsamlı bir görünüm sunarak, kullanıcılara açıklamadan sonuç yorumlamaya kadar her adımda rehberlik eder.
Bölüm-2 : Bellek Kullanıcı ( Memory Monitoring )
Bellek kullanımının izlenmesi, bellek baskısının, olası bellek sızıntılarının tespit edilmesine ve SQL Server’ın mevcut belleği ne kadar verimli kullandığının anlaşılmasına yardımcı olur. Etkili bellek yönetimi, SQL Server’ın performansını ve kararlılığını korumak için çok önemlidir.
Nasıl Yapılır?
2. New Query diyerek sorgu penceresini açın :
Sorgu :
SELECT
type AS MemoryType,
SUM(pages_kb) / 1024 AS MemoryUsage_MB
FROM sys.dm_os_memory_clerks
GROUP BY type
ORDER BY SUM(pages_kb)
DESC;
Sorguyu Açıklayalım :
MemoryType: Clerk’ler SQL Server’ın farklı alanlarında bellek yönetiminden sorumludur. Önbelleğe alınmış nesne ve SQL planları için ilgili clerk tipini gösterir.
( Bkz. SQL Server Memory Managemenet : Tıklayın )
MemoryUsage_MB: Her bir clerk türü tarafından megabayt cinsinden kullanılan toplam bellek. Bu, SQL Server’ın her bir bileşeninin ne kadar bellek tükettiğini gösterir. Belirli bellek türlerinde yüksek bir değer, SQL Server’ın gereğinden fazla bellek tuttuğunu ve potansiyel olarak bellek baskısına yol açtığını gösterebilir.
GROUPBYandORDERBY: Sorgu, bellek kullanımını clerk türüne göre gruplandırır ve sonuçları kullanılan bellek miktarına göre sıralayarak hangi clerk’lerin en çok bellek kullandığını belirlemeyi kolaylaştırır.
Çıktı :
Bu yapı, SQL Server içindeki bellek kullanımını anlamanıza ve yönetmenize yardımcı olarak, bellek kaynaklarının optimum performansı korumak için verimli bir şekilde tahsis edilmesini sağlar.
Bölüm-3 : Disk I/O Monitoring ( Disk İzleme )
SQL Server’da Disk I/O İzleme, veritabanlarında gerçekleştirilen okuma ve yazma işlemlerinin izlenmesini içerir.
1. Sql Management Studio’yu ( SSMS) açın ve ilgili instance’a bağlanın :
2. New Query diyerek sorgu penceresini açın :
Sorgu :
SELECT
db_name(vfs.database_id) AS DatabaseName,
vfs.file_id, mf.name AS LogicalFileName,
vfs.num_of_reads AS Reads, vfs.num_of_writes AS Writes,
vfs.io_stall_read_ms AS TotalReadLatency_MS,
vfs.io_stall_write_ms AS TotalWriteLatency_MS,
(vfs.io_stall_read_ms / vfs.num_of_reads) AS AvgReadLatency_MS,
(vfs.io_stall_write_ms / vfs.num_of_writes) AS AvgWriteLatency_MS
FROM sys.dm_io_virtual_file_stats(NULL, NULL) vfs
JOIN sys.master_files mf ON vfs.database_id = mf.database_id AND vfs.file_id = mf.file_id
ORDER BY AvgReadLatency_MS DESC;
Sorguyu açıklayalım :
DatabaseName: Dosyanın ait olduğu veritabanının adı.
file_id: Veritabanı içindeki dosyanın kimliği. Bu, yüksek I/O etkinliği yaşayan belirli dosyaların tanımlanmasına yardımcı olur.
LogicalFileName: Veritabanı dosyasının mantıksal adıdır ve dosya kimliğinden daha anlaşılır bir referans sağlar.
Reads/Writes: Dosya üzerinde gerçekleştirilen okuma ve yazma işlemlerinin toplam sayısı. Yüksek sayıda işlem, yoğun olarak kullanılan ve muhtemelen I/O sıkıntısına yol açan bir dosyayı gösterebilir.
TotalReadLatency_MS/TotalWriteLatency_MS: SQL Server’ın okuma ve yazma işlemlerinin tamamlanması için beklediği milisaniye cinsinden toplam süre. Yüksek değerler, I/O işlemlerinin yavaş olduğunu gösterir ve bu da genel performansı etkileyebilir.
AvgReadLatency_MS/AvgWriteLatency_MS: Milisaniye cinsinden okuma veya yazma işlemi başına geçen ortalama süre. Bu, yavaş I/O performansını tanımlamak için önemli bir metriktir ve daha yüksek değerler altta yatan disk alt sistemiyle ilgili olası sorunları gösterir.
Çıktı:
Bölüm-4 : Query Performance Monitoring ( Sorgu Performansı İzleme)
Sorgu performansının izlenmesi SQL ifadelerinin optimize edilmesine, yanıt sürelerinin iyileştirilmesine ve sunucu üzerindeki yükün azaltılmasına yardımcı olur.
1. Sql Management Studio’yu ( SSMS) açın ve ilgili instance’a bağlanın :
2. New Query diyerek sorgu penceresini açın :
Sorgu :
SELECT
TOP 10 qs.sql_handle,
qs.execution_count, qs.total_worker_time / 1000 AS TotalCPU_MS,
qs.total_elapsed_time / 1000 AS TotalDuration_MS,
qs.total_logical_reads AS LogicalReads,
qs.total_physical_reads AS PhysicalReads,
qs.total_logical_writes AS LogicalWrites,
SUBSTRING(st.text, (qs.statement_start_offset/2)+1, ((CASE statement_end_offset WHEN-1 THEN
DATALENGTH(st.text) ELSE qs.statement_end_offset END- qs.statement_start_offset)/2) + 1) AS QueryText
FROM sys.dm_exec_query_stats qs CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) st
Sorguyu Açıklayalım :
sql_handle: Sorgu için benzersiz bir tanımlayıcı.
execution_count: Sorgunun kaç kez yürütüldüğünün sayısı. Yüksek kaynak kullanımı ile birlikte yüksek yürütme sayıları, sık çalıştırılan bir sorgunun genel yüke önemli bir katkıda bulunduğunu gösterebilir.
TotalCPU_MS: Sorgu tarafından tüketilen toplam milisaniye cinsinden CPU süresi. Yüksek CPU kullanımına sahip sorgular sunucu performansını etkileyebilir ve optimize edilmelidir.
TotalDuration_MS: Sorgunun yürütülmesi için geçen toplam süre, milisaniye cinsinden.
LogicalReads/PhysicalReads: Sorgu tarafından gerçekleştirilen mantıksal ve fiziksel okuma işlemlerinin sayısı. Yüksek okuma işlemleri, sorgunun büyük miktarda veri işlediğini ve muhtemelen performans sorunlarına yol açtığını gösterebilir.
LogicalWrites: Mantıksal yazma işlemlerinin sayısı.
QueryText: Yürütülen gerçek SQL ifadesi. Bu, kaynakları tüketen sorguyu tanımlamak ve anlamak için çok önemlidir ve onu optimize etmeye odaklanmanıza olanak tanır.
Çıktı :
Vaktim oldukça bu seriye devam edeceğim. Şimlik genel anlamda disk, cpu, ram ve sorgu performanslarına odaklanan izleme nasıl yapılır bunlara değindik. Diğer makalelerde daha veritabanı özelinde “integration check, log file, permission, SQL injection detection ) gibi fonksiyonel izleme yollarına odaklanacağım.
Kolaylıklar dilerim