MSSQL Server’da WAITFOR Bekleme Tipi

SQL Server’da WAITFOR, bir komutun veya işlemin belirli bir süre boyunca duraklatılmasını sağlayan bir deyimdir. Genellikle otomasyonlar, test senaryoları veya zaman ayarlı görevler için kullanılır.

Bu komut fiziksel bir “hata” veya “darboğaz” tipi değil, geliştiricinin isteğiyle oluşan kasıtlı bir geciktirmedir.

SQL Server’da iki ana kullanım şekli vardır:

1. Belirli Bir Süre Beklemek (DELAY)

Sorgunun ne kadar süre boyunca uyuyacağını belirtirsiniz.

  • Format: hh:mm:ss (Maksimum 24 saat).

10 saniye bekledikten sonra sorguyu çalıştırır.

WAITFOR DELAY '00:00:10';
SELECT * FROM Employees;

2. Belirli Bir Saati Beklemek (TIME)

Sorgunun günün belirli bir saatine kadar beklemesini sağlar.

  • Format: hh:mm:ss (24 saatlik format).

Gece 23:30 olana kadar işlemi başlatmaz

WAITFOR TIME '23:30:00';
EXEC sp_DailyReport;

Eğer bir izleme aracında (Activity Monitor veya SQL Profiler gibi) WAITFOR bekleme tipini görüyorsanız, bu genellikle şu anlama gelir:

  • Kullanıcı Kaynaklı Duraklatma: Bir WAITFOR komutu çalışıyor demektir.
  • Service Broker: SQL Server Service Broker kuyruklarını dinlerken (RECEIVE komutu ile) boş kuyrukta beklediğinde bu tipte bir bekleme kaydı oluşturur.

Dikkat Edilmesi Gerekenler:

  1. Bağlantı (Connection) İşgali: WAITFOR çalıştığı sürece o bağlantı (session) meşgul görünür. Çok fazla eşzamanlı WAITFOR kullanımı, bağlantı havuzunu (connection pool) doldurabilir.
  2. Transaction Riski: Eğer bir BEGIN TRANSACTION bloğu içinde WAITFOR kullanırsanız, bekleme süresi boyunca tüm kilitler (locks) tutulmaya devam eder. Bu da ciddi Blocking (engelleme) sorunlarına yol açar.

Özetle

ÖzellikAçıklama
GrupUser Wait (Kullanıcı Beklemesi)
Amaçİş akışını senkronize etmek veya geciktirmek.
Maksimum Süre24 Saat.
CPU TüketimiBekleme sırasında neredeyse sıfırdır.

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

Author: Yunus YÜCEL

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir