Clock, server and a task list, representing Windows Task Scheduler jobs affecting SQL Server

Windows Task Scheduler’ı Gözden Geçirin: Periyodik SQL Server Yavaşlıklarının Gizli Kaynağı

Veritabanı sunucusundaki zamanlanmış görevlerin her gün aynı saatte yavaşlığa nasıl yol açtığı, PowerShell ile nasıl listeleneceği ve veritabanı işlerinin SQL Server Agent’a nasıl taşınacağı.

Ocak 12, 2022

Her gün aynı saatte birkaç dakika süren bir yavaşlık, SQL Server tarafında hiçbir açıklama bulamıyorsanız, çoğu zaman sunucunun kendisinde çalışan başka bir işin izidir. Windows Task Scheduler’da tanımlı görevler; dosya kopyalama script’leri, eski yedekleme araçları, antivirüs taramaları, disk bakımı ya da bir zamanlar biri tarafından kurulmuş ve unutulmuş bir rapor programı, SQL Server ile aynı CPU’yu, belleği ve diski paylaşır. Bu görevler SQL Server’ın kendi araçlarında görünmediği için genellikle en son akla gelir.

Bu yazıda bir veritabanı sunucusundaki zamanlanmış görevleri nasıl listeleyeceğinizi, performans düşüşleriyle nasıl ilişkilendireceğinizi ve nasıl düzenleyeceğinizi anlatıyoruz.

SQL Server Performans Danışmanlığı

Belirli saatlerde açıklanamayan yavaşlıklar mı var?

Aryasoft, SQL Server'ı ve üzerinde çalıştığı sunucuyu birlikte inceler; periyodik yavaşlıkların kaynağını bulur.

Destek Alın

Belirtiler

  • Her gün ya da her hafta aynı saatte tekrarlayan yavaşlık.
  • SQL Server’da o saatte çalışan ağır bir sorgu ya da Agent job’ı yok.
  • Disk gecikmesi ya da CPU kullanımı o saatte yükseliyor, ama SQL Server sürecinin payı artmıyor.
  • Bekleme istatistiklerinde PAGEIOLATCH ya da WRITELOG beklemeleri belirli dönemlerde artıyor.

Zamanlanmış Görevleri Listelemek

Windows’un kendi bakım görevleri \Microsoft\ klasöründe bulunur. Asıl bakmanız gerekenler, sonradan eklenmiş görevlerdir:

# Microsoft dışındaki etkin görevler, sonraki ve son çalışma zamanlarıyla
Get-ScheduledTask |
    Where-Object { $_.State -ne 'Disabled' -and $_.TaskPath -notlike '\Microsoft\*' } |
    ForEach-Object {
        $info = Get-ScheduledTaskInfo -TaskName $_.TaskName -TaskPath $_.TaskPath
        [pscustomobject]@{
            Gorev       = $_.TaskPath + $_.TaskName
            Calistiran  = $_.Principal.UserId
            Komut       = ($_.Actions | ForEach-Object { $_.Execute + ' ' + $_.Arguments }) -join '; '
            SonCalisma  = $info.LastRunTime
            SonrakiCalisma = $info.NextRunTime
        }
    } | Sort-Object SonrakiCalisma | Format-Table -AutoSize

Sonuçtaki görevlerin çalışma saatlerini, yavaşlık yaşanan saatlerle karşılaştırın. Görevin hangi hesapla çalıştığı (Calistiran) da önemlidir: yerel yönetici ya da etki alanı yöneticisi hesabıyla çalışan, kime ait olduğu bilinmeyen bir görev aynı zamanda bir güvenlik riskidir.

Sık Karşılaşılan Görevler

  • Dosya düzeyinde yedekleme ve kopyalama: SQL Server veri ve log dosyalarını ya da yedek klasörünü kopyalayan script’ler. SQL Server’ın açık tuttuğu dosyaları kopyalamak hem yük yaratır hem de tutarlı bir yedek üretmez.
  • Antivirüs taramaları: SQL Server dosyaları ve klasörleri istisna listesinde değilse, tam tarama veri dosyalarına da dokunur.
  • Disk birleştirme ve bakım: SAN ya da sanal disklerde gereksiz I/O yaratabilir; depolama ekibiyle birlikte değerlendirin.
  • Eski raporlama ve entegrasyon script’leri: sqlcmd ya da PowerShell ile veritabanına sorgu atan, kimsenin artık kullanmadığı programlar.
  • Güncelleme ve envanter araçları: İş saatlerinde çalışacak şekilde ayarlanmış tarama ve güncelleme görevleri.

Uyarı

Veritabanı dosyalarını (mdf, ndf, ldf) dosya kopyalama yoluyla yedeklemek tutarlı bir yedek üretmez; SQL Server çalışırken kopyalanan dosyalardan geri dönüş çoğu zaman mümkün olmaz. Veritabanı yedekleri her zaman BACKUP komutuyla ya da SQL Server’la entegre çalışan bir yedekleme çözümüyle alınmalıdır.

Ne Yapılmalı?

  1. Her görevin sahibini ve amacını belirleyin; sahibi olmayan ve amacı bilinmeyen görevleri devre dışı bırakın.
  2. Veritabanıyla ilgili işleri SQL Server Agent’a taşıyın; böylece geçmişleri, bildirimleri ve zamanlamaları tek yerden yönetilir. Bkz. SQL Server Agent rehberimiz.
  3. Kalması gereken görevleri SQL Server’ın bakım pencereleriyle çakışmayacak saatlere alın.
  4. Antivirüs istisnalarını SQL Server için tanımlayın.
  5. Görev listesini sunucu belgelerine ekleyin ve health check’lerde düzenli olarak gözden geçirin.

İpucu

Belirli saatlerde tekrarlayan yavaşlıkları araştırırken, SQL Server’ın kendi bekleme istatistiklerini ve disk gecikmesini periyodik olarak bir tabloya kaydedin. Hangi saatte neyin değiştiğini gösteren bir baseline, sorunun SQL Server içinden mi dışından mı geldiğini birkaç gün içinde ortaya çıkarır.

Kontrol Listesi

  • Microsoft dışındaki tüm zamanlanmış görevler listelendi.
  • Her görevin sahibi, amacı ve çalıştığı hesap belli.
  • Veritabanı işleri Agent’a taşındı.
  • Kalan görevler bakım pencereleriyle çakışmıyor.
  • Dosya kopyalamayla veritabanı yedeklemesi yapılmıyor.
Evet. Zamanlanmış görevler aynı CPU, bellek ve diski paylaşır; belirli saatlerde tekrarlayan yavaşlıkların sık nedenlerinden biridir.
PowerShell’de Get-ScheduledTask ve Get-ScheduledTaskInfo ile; \Microsoft\ klasörü dışındaki etkin görevlere odaklanın.
SQL Server Agent’ta. Agent geçmiş, bildirim ve hata yönetimini tek yerden sağlar.
Hayır. Çalışan bir SQL Server’ın dosyalarını kopyalamak tutarlı bir yedek üretmez; BACKUP komutu ya da SQL Server ile entegre bir yedekleme çözümü kullanılmalıdır.

SQL Server Performans Danışmanlığı

Sunucunuzun tamamını görün

Aryasoft’un kıdemli DBA ekibi SQL Server’ı ve üzerinde çalıştığı sunucuyu birlikte inceler; zamanlanmış görevler, antivirüs ve diğer yazılımlar kaynaklı periyodik yavaşlıkları bulur ve giderir.

4.7/5