Bu makalede mssql server üzerinde MSSQL Server Task Scheduler ve Resource Bekleme Tipleri detaylı bir şekilde görmüş olacağız. İlk olarak çalıştığım sistemde en çok bekleme tiplerine sebep olan bekleme tiplerinden başlayacağız. Bunun için aşağıdaki komut kullanılır.
SELECT
wait_type,
wait_time_ms/1000.0 AS WaitTimeSec,
signal_wait_time_ms/1000.0 AS SignalWaitTimeSec,
(wait_time_ms *100.0)/SUM(wait_time_ms) OVER() AS Yüzde
FROM sys.dm_os_wait_stats
WHERE wait_time_ms > 0
ORDER BY Yüzde DESC;

- WaitTimeSec: Bu bekleme türünün toplam bekleme süresini saniye cinsinden gösterir. Yani SQL Server, ilgili kaynak için toplamda ne kadar beklemiş.
- SignalWaitTimeSec: İşlemcinin (CPU) kullanıma hazır olmasını beklerken geçen süredir. Yüksek değerler, CPU darboğazı olabileceğini gösterir.
- Yüzde: Toplam bekleme süresine göre bu bekleme türünün yüzdesel oranını gösterir. En çok hangi bekleme türünün sistemi yavaşlattığını anlamak için kullanılır.
Şimdi yukarıdaki bekleme tiplerini detaylı bir aşağıda katagorilere ayrılmış şekilde detaylı bir şekilde açıklayalım.
Ayrıca Session bazlı hangi sorguların bekleme tipleri olduğunu görmek için aşağıdaki komut kullanılır.
SELECT session_id, wait_type, wait_time/1000 as bekleme_Saniye, wait_resource
FROM sys.dm_exec_requests
WHERE wait_type <> 'WAITFOR'
SQL Server’daki bekleme türleri (wait types), veritabanı motorunun çeşitli kaynaklar için yaptığı beklemeleri izler ve yönetir. Bu beklemeler, SQL Server’ın işlemleri nasıl gerçekleştirdiğini, hangi kaynakların talep edildiğini ve hangi işlemlerin zaman alarak beklediğini anlamanızı sağlar. Bekleme türlerinin doğru analiz edilmesi, SQL Server’daki performans sorunlarının tespit edilmesi ve çözülmesi için kritik öneme sahiptir.
SQL Server’da Bekleme Türlerini Neden İzleriz?
- Performans Analizi: Bekleme türleri, hangi kaynakların darboğaz oluşturduğunu belirlemek için kullanılır. Eğer belirli bir kaynakta sürekli bekleme oluyorsa, bu kaynak üzerinde iyileştirme yapılması gerekebilir.
- Veritabanı Optimizasyonu: Bir işlem ya da sorgu belirli bir kaynağı bekliyorsa, bu kaynağın optimizasyonu (örneğin, disk I/O’su ya da bellek yönetimi) sorgunun daha hızlı çalışmasını sağlayabilir.
- Veritabanı Yönetimi: Bekleme türleri, veritabanı yöneticilerinin (DBA) sistemdeki kaynak kullanımını izlemesine ve veritabanı altyapısını optimize etmesine yardımcı olur.
SQL Server Bekleme Türlerinin Temel Kategorileri
SQL Server’daki bekleme türlerini birkaç ana kategoride toplayabiliriz:
- CPU ile ilgili beklemeler
- Disk I/O ile ilgili beklemeler
- Memory (bellek) ile ilgili beklemeler
- Network (ağ) ile ilgili beklemeler
- Task Scheduler ve Resource ile ilgili beklemeler
Task Scheduler ve Resource ile ilgili beklemeler ile ilgili kategoriyi detaylı olarak inceleyelim:
5. Task Scheduler ve Resource ile ilgili beklemeler
SQL Server, belirli görevleri zamanlayarak çalıştırabilir. Eğer bu görevler bir sebepten dolayı beklemeye alınırsa, bu beklemeler meydana gelir.
Örnek Bekleme Türleri:
- SLEEP_TASK:
- SLEEP_TASK, SQL Server’daki bir iş parçacığının (thread), bilerek (intentionally) bekletilmesi durumudur.
Yani: Bu bir “sorun” değil, daha çok “SQL Server şu anda bir işi bitirdi ve planlı olarak uykuya geçti” anlamına gelir. SLEEP_TASK Kötü Bir Şey mi? Hayır. Aksine bu wait type: - Planlı, normal bir durumdur
- CPU, bellek veya I/O ile ilgili değildir
- Sadece sistemin boşta bekleyen thread’leri nasıl yönettiğini gösterir
- SLEEP_TASK, SQL Server’daki bir iş parçacığının (thread), bilerek (intentionally) bekletilmesi durumudur.
- SQL Agent – Job Scheduling
SQL Server Agent, SQL Server üzerinde belirli görevlerin otomatik olarak çalıştırılmasını sağlayan bir zamanlayıcıdır. SQL Server Agent, zamanlanmış işlerin çalıştırılmasında kullanılan Job Scheduler‘a dayanır. Bu işlerin çalıştırılması esnasında çeşitli beklemeler oluşabilir.
- Job Execution Waiting (İşlem Bekleme)
SQL Server Agent zamanlanmış bir işi çalıştırmadan önce işin başlatılması, işlemin başladığına dair onay alınması ve sistemin iş için gereken kaynakları sağladığından emin olması gerekir. Bu durum, SQL Server Agent’ın görevleri planlı şekilde başlatmadan önce bazen sistem kaynaklarının yetersizliği veya işin sistem üzerinde çalışması için gereken ortamın olmaması durumunda bekleme yaratabilir. Zamanlanmış görevler başlatılmaya çalışıldığında, özellikle disk, CPU veya bellek gibi sistem kaynaklarında gecikmeler veya kaynak yetersizliği olduğunda bu beklemeler görülebilir. Bu tür beklemeleri azaltmak için gerekli kaynakların (CPU, bellek, disk) yeterli olduğundan emin olunması gereklidir. Ayrıca, işlerin önceliğini belirlemek, gereksiz işleri geçici olarak durdurmak veya kendi zamanlarını ayarlamak bu tür beklemeleri azaltabilir
- Task Scheduler and Blocking
SQL Server Agent’ın zamanlanmış görevleri çalıştırırken karşılaştığı bir diğer olası sorun, görevlerin diğer işlemler tarafından engellenmesi veya kilitlenmesi durumudur. Örneğin, zamanlanmış bir görev veri tabanında işlem yapmaya çalıştığında, bu işlem başka bir uzun süren işlem tarafından engellenebilir. Bu tür durumlar bekleme sürelerini artırabilir ve görevlerin zamanında tamamlanmamasına neden olabilir
Resource (Kaynak) ile İlgili Beklemeler
SQL Server’daki kaynakların yetersizliği veya veritabanının işlemci, bellek, disk gibi kaynakları talep etmesi durumunda karşılaşılan beklemelerdir.
Örnek Bekleme Türleri:
- RESOURCE_SEMAPHORE_QUERY_COMPILE:
- Bu wait type, bir sorgunun derlenmeden önce yeterli derleme belleği (memory for query compilation) bulamadığını ve sıra beklediğini gösterir.
Yani: Sorgu çalışmadan önce plan oluşturulacak, ama SQL Server derleme için bellek ayıramıyor → bekletiyor.
Bellek boşalana kadar veya başka bir sorgu işi bitirene kadar bu sorgu beklemeye alınır. - RESOURCE_SEMAPHORE: Sorgu çalışma belleği bekliyor
- RESOURCE_SEMAPHORE_QUERY_COMPILE: Sorgu derleme belleği bekliyor
- Bu wait type, bir sorgunun derlenmeden önce yeterli derleme belleği (memory for query compilation) bulamadığını ve sıra beklediğini gösterir.
- THREADPOOL:
- THREADPOOL, SQL Server’ın bir iş parçacığı (thread) kullanıma hazır olmadığı için bir görevi başlatamadığını gösterir.
Yani SQL Server diyor ki:
“Bu sorguyu çalıştırmak istiyorum ama thread kalmadı, bekliyorum.”
- THREADPOOL, SQL Server’ın bir iş parçacığı (thread) kullanıma hazır olmadığı için bir görevi başlatamadığını gösterir.
Ne Zaman Olur?
Durum | Neden |
---|---|
Çok fazla eşzamanlı kullanıcı / sorgu | Hepsi thread talep eder |
Paralel (parallel) execution planlar | Tek bir sorgu bile 8-16 thread kullanabilir |
Blocking (kilitlenme) | Bazı thread’ler kilitlenmiş, ama sistem hâlâ yeni thread açamıyor |
CPU yetersiz | Core sayısı azsa, SQL thread başlatamaz |
Uzun süre çalışan işlemler | Thread’ler uzun süre meşgul kalır → diğer sorgular bekler |
SQL Server’da Bekleme Türlerini İzlemek
Bekleme türlerini izlemek için SQL Server’da şu DMV’leri (Dinamik Yönetim Görünümleri) kullanabilirsiniz:
- sys.dm_exec_requests: Aktif isteklerin bekleme durumlarını görmenizi sağlar.
- sys.dm_exec_sessions: SQL Server oturumlarının durumlarını izler.
- sys.dm_exec_wait_stats: Tüm bekleme türleri hakkında genel bilgi sunar.
Makalenin başında belirtilen diğer bekleme tiplerine değinelim.
1. LCK_xx
Page veya Index page’lere erişilmek istendiğinde lock durumunda oluşan contention’dır. Çözüm olarak isolation leveller kontrol edilmeli. REPEATABLE_READ and SERIALIZABLE levellerde bu sorun ile karşılaşılabilir. Ayrıca tablolardan okunan,yazılan ve güncellenen dataların sıklığı hakkında bilgi alınmalıdır.
2. LCK_M_U= Update Lock.
LCK_M_X= Insert Lock
LCK_M_S= Select Lock.
3. WAITFOR= Bu ifade, bir sorgunun yürütülmesini belirli bir süre bekletmek veya belirli bir zamana kadar geciktirmek için kullanılır. Uzun bekleme süreleri, bağlantıları gereksiz yere meşgul edebilir ve sistem kaynaklarını tüketebilir.
WAITFOR Türleri:
- WAITFOR DELAY (Belirli Bir Süre Bekletme)
- WAITFOR TIME (Belirli Bir Zamana Kadar Bekletme)
Bu bekleme türü daha çok sorguların yüksek oradan tekrar plan oluşturduğunda meydana gelir.
Yoğun insert işlemlerinde IX kilidi almasının sebebi. Clustered index aynı anahtar aralığına ekleme yapmaya çalışmasından dolayıdır. İdendity kolonu ile ilgili çakışma vardır.
Bekleme türleri, SQL Server’daki performans sorunlarını anlamak ve çözmek için kritik verilerdir. Bu türler, hangi kaynakların sıkça talep edildiğini ve hangi işlemlerin kaynaklar yüzünden beklediğini gösterir. Performans izleme, veritabanı yönetimi ve optimizasyon süreçlerinde bekleme türlerini doğru bir şekilde analiz etmek, veritabanının verimli çalışmasını sağlamak için gereklidir.
Başka bir makalede görüşmek dileğiyle..
“O gün, başlarını dikerek koşacaklar, gözleri kendilerine bile dönmeyecek ve gönülleri bomboş kalacaktır.”İbrahim-43