SQL Server Yavaş Sorgu Bulma Scripti

NocturneX

Astsubay Başçavuş
Admin
Katılım
23 Kasım 2025
Mesajlar
984
Reaksiyon puanı
56
SQL Server’da yavaş sorguları tespit etmek, veritabanı yönetiminin en kritik adımlarından biridir. Uzun süren sorgular, kullanıcı deneyimini olumsuz etkilerken, sistem kaynaklarını da israf eder. Bu nedenle, yavaş sorguları tespit etmek için kullanabileceğiniz birkaç yöntem ve script bulunmaktadır. Özellikle, `sys.dm_exec_query_stats` ve `sys.dm_exec_requests` gibi dinamik yönetim görünümleri, sorguların performansını analiz etmenize yardımcı olur. Bu görünümler, sorguların ne kadar süre çalıştığını, kaç kere çalıştığını ve hangi kaynakları tükettiğini gösterir. Yavaş sorguları bulmak için bu iki görünümü birleştirerek sorgularınızı optimize edebilirsiniz.

Kendinize şu soruyu sorun: Hangi sorgular sistemde en fazla kaynak tüketiyor? Bu sorunun yanıtını almak için aşağıdaki scripti kullanabilirsiniz. Bu script, en fazla kaynak kullanan ve en uzun süre çalışan sorguları sıralar. İşte basit ama etkili bir örnek:

```sql
SELECT TOP 10
qs.total_worker_time AS TotalCPUTime,
qs.execution_count AS ExecutionCount,
qs.total_elapsed_time AS TotalElapsedTime,
qs.total_logical_reads AS TotalLogicalReads,
SUBSTRING(qt.text, (qs.statement_start_offset/2) + 1,
((CASE qs.statement_end_offset
WHEN -1 THEN DATALENGTH(qt.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) qt
ORDER BY
TotalElapsedTime DESC;
```

Bu script, CPU kullanımına göre en çok kaynak tüketen ilk on sorguyu listeler. `TotalElapsedTime` sütununu kullanarak, en çok zaman harcayan sorgulara ulaşabilirsiniz. Yavaş sorguları bulmak sadece başlangıçtır; bu sorguları optimize etmek için ek adımlar atmalısınız. Mesela, indekslerinizi gözden geçirmeniz, gereksiz sorguları kaldırmanız veya sorgu planlarını incelemeniz faydalı olacaktır.

Yavaş sorguları tespit ettikten sonra, hangi indekslerin eklenmesi veya güncellenmesi gerektiğini düşünmelisiniz. Özellikle, `sys.dm_db_index_usage_stats` görünümünü kullanarak, hangi indekslerin kullanılmadığını veya hangi sorguların hangi indekslerden yararlandığını analiz edebilirsiniz. Bu, hem sistem performansını artıracak hem de gereksiz veri yükünü azaltacaktır. Unutmayın ki, gereksiz indeksler de performansı olumsuz etkileyebilir…

Bir diğer önemli nokta, sorgularınızın çalışma planlarını incelemektir. Sorgu planlarını analiz etmek, sorgularınızın neden yavaş çalıştığını anlamanıza yardımcı olur. SQL Server Management Studio’da, sorgunuzu çalıştırmadan önce “Include Actual Execution Plan” seçeneğini işaretleyerek, sorgunun çalışma planını görebilirsiniz. Burada, sorgunun hangi adımların ne kadar zaman aldığını analiz edebilirsiniz. Kimi zaman basit bir düzenleme ile, sorgularınızın performansını önemli ölçüde artırabilirsiniz.

Son olarak, SQL Server’ın sunduğu otomatik optimizasyon özelliklerini de kullanmalısınız. Özellikle `Automatic Tuning` seçeneği, SQL Server’ın kendi kendini optimize etmesini sağlar. Bu özellik, belirli sorgu kalıplarını analiz ederek, otomatik olarak indeks ekleyebilir veya sorgu planlarını düzeltebilir. Ancak, bu tür otomatik optimizasyonların ne kadar etkili olduğunu düzenli olarak kontrol etmekte fayda var. Her durumda, manuel müdahale gerektiren durumlar olabilir...

Yavaş sorgularla başa çıkmak, veritabanı yönetiminin en önemli parçalarından biridir. Uyguladığınız scriptler ve analiz yöntemleri sayesinde, sorgularınızı hızlandırabilir ve sistem performansını artırabilirsiniz. Unutmayın, her zaman veritabanı sağlığını kontrol etmek ve gerektiğinde müdahalelerde bulunmak, uzun vadede size büyük kazançlar sağlayacaktır.
 
Geri
Üst Alt