Server with a wrench and a warning sign, representing common SQL Server performance tuning mistakes

SQL Server Performans Ayarında Sık Yapılan 12 Hata ve Yerine Yapılması Gerekenler

Sahada en sık gördüğümüz SQL Server performans ayarı hataları: önce yeniden başlatmak, cache temizlemek, MAXDOP 1, körü körüne eksik index ve NOLOCK; ve bunların yerine yapılması gerekenler.

Mart 17, 2021

SQL Server performans sorunlarının önemli bir kısmı, sorunun kendisinden çok ona verilen tepkiden büyür. Panikle yeniden başlatılan bir sunucu, bilinçsizce eklenen index’ler, sunucu genelinde kapatılan paralellik ya da ölçmeden yapılan beş değişiklik aynı anda; hepsi kısa vadede bir şey yapmış olma hissi verir, uzun vadede ise sorunu gizler ya da büyütür.

Bu yazıda sahada en sık karşılaştığımız performans ayarı hatalarını, neden zararlı olduklarını ve bunların yerine ne yapılması gerektiğini topluyoruz.

SQL Server Performans Danışmanlığı

Performans sorununu kalıcı olarak çözmek mi istiyorsunuz?

Aryasoft, sorunu ölçerek bulur; kök nedeni giderir ve iyileştirmeyi sayılarla doğrular.

Destek Alın

1. Önce Yeniden Başlatmak

Yeniden başlatma, sorunun kanıtını (çalışan istekler, bekleme istatistikleri, plan cache) siler. Uzun transaction’lar varsa veritabanı uzun bir recovery sürecine girer ve kesinti, yeniden başlatmadan önceki halinden daha uzun sürer. Önce içeri bakın; sunucu yanıt vermiyorsa DAC ile bağlanın.

2. Herkesin Aynı Anda Müdahale Etmesi

Kriz anında biri sanal makinenin kaynaklarını değiştirir, biri oturumları sonlandırır, biri plan cache’i temizler, biri MAXDOP’u düşürür. Sonuçta hangi adımın neyi değiştirdiği bilinmez. Tek bir kişi yönetsin, her adım kaydedilsin. Bu yaklaşımı kesinti runbook’umuzda anlatıyoruz.

3. Plan Cache’i ve Buffer Pool’u Temizlemek

DBCC FREEPROCCACHE ve DBCC DROPCLEANBUFFERS üretimde sorunu çözmez: tüm sorgular yeniden derlenir, veriler diskten yeniden okunur ve kısa süreli bir CPU ve I/O fırtınası yaşanır. Kötü bir plan varsa yalnızca o planı hedefleyin ya da Query Store ile iyi planı zorlayın.

4. MAXDOP’u Sunucu Genelinde 1 Yapmak

Yüksek CXPACKET beklemelerine verilen bu tepki, paralelliği tamamen kapatır; raporlar, index bakımı ve CHECKDB dramatik şekilde yavaşlar. Doğru yaklaşım, MAXDOP ve cost threshold değerlerini önerilen aralığa getirmek ve paralel çalışan pahalı sorgulara bakmaktır.

5. Eksik Index Önerilerini Körü Körüne Uygulamak

Missing index DMV’leri ve execution plan’daki yeşil öneriler, tek bir sorguya bakarak üretilir. Hepsini uygulamak, aynı kolonları içeren düzinelerce benzer index’e, yavaşlayan yazma işlemlerine ve şişen bakım sürelerine yol açar. Önerileri mevcut index’lerle birleştirerek değerlendirin; ayrıntılar index rehberimizde.

6. Her Gece Tüm Index’leri Rebuild Etmek

Parçalanma oranına bakmadan her gece her index’i yeniden oluşturmak, log’u şişirir, Always On secondary’lerine gereksiz yük bindirir ve bakım penceresini doldurur. Parçalanmaya ve sayfa sayısına göre karar veren bir bakım ve düzenli istatistik güncellemesi çok daha verimlidir.

7. Her Sorguya NOLOCK Eklemek

NOLOCK (READ UNCOMMITTED) blocking’i azaltır ama kirli okumalara, aynı satırı iki kez okumaya ya da hiç okumamaya yol açabilir. Finansal raporlarda yanlış sonuç, kilitlenmeden daha pahalıdır. Okuma ve yazma çakışmaları için read committed snapshot isolation (RCSI) genellikle çok daha güvenli bir çözümdür.

8. Veritabanını Shrink Etmek

Disk alanı kazanmak için düzenli shrink, ciddi index parçalanmasına ve ardından dosyanın yeniden büyümesine yol açar. Bkz. shrink rehberimiz.

9. Ölçmeden Değiştirmek

Baseline olmadan yapılan bir değişikliğin işe yarayıp yaramadığını kimse bilemez. Değişiklikten önce ve sonra aynı ölçümü (sorgu süresi, okuma, CPU, bekleme istatistikleri) alın ve her seferinde tek bir şeyi değiştirin.

10. Execution Plan’a Bakmamak

Bir sorgunun neden yavaş olduğunun cevabı çoğu zaman planındadır: büyük tablo taramaları, örtük tip dönüşümleri, tahmini ve gerçek satır sayısı arasındaki büyük farklar. Plan okumadan yapılan tuning tahmindir. Pahalı sorguları bulmak için yavaş sorgu rehberimize bakın.

11. İlk Çözümü Donanımda Aramak

Daha fazla CPU ya da bellek, verimsiz bir sorguyu bir süre gizleyebilir ama düzeltmez; SQL Server çekirdek bazında lisanslandığı için de kalıcı bir maliyet yaratır. Önce iş yükünü ölçün.

12. Performansı Konuşurken Yedeği ve CHECKDB’yi Unutmak

Performans şikâyetiyle başlayan incelemelerde en sık bulduğumuz iki sorun, aslında performansla ilgili değildir: iş biriminin RPO ve RTO hedefleriyle uyumlu bir yedek planı yoktur ve DBCC CHECKDB düzenli çalışmaz. Hızlı ama geri dönülemeyen bir veritabanı, yavaş bir veritabanından çok daha büyük bir risktir.

Kritik

Bozulma fark edildiğinde, CHECKDB’nin son başarılı çalıştığı tarihten önceki temiz bir yedeğe ve ondan sonraki tüm log yedeklerine ihtiyacınız olur. CHECKDB haftalardır çalışmıyorsa ve log yedekleri o kadar geriye gitmiyorsa, veri kaybı kaçınılmaz olabilir. Performans çalışmasına başlamadan önce yedek zincirini ve CHECKDB’yi doğrulayın.

İpucu

Sahada bir kesinti anında ekibimizin ilk baktığı yerler sırasıyla izleme uyarıları, error log, aktif oturumlar, Agent job’ları, kaynak kullanımı, disk gecikmesi ve mantıksal işlemciler arasında CPU dağılımıdır. Bu sıra, panikle müdahale etmeden önce sorunun nerede olduğunu dakikalar içinde gösterir.

Yeniden başlatmadan önce çalışan isteklere, blocking’e, bekleme istatistiklerine ve error log’a bakın. Sunucu yanıt vermiyorsa DAC ile bağlanın.
Genellikle hayır. Tüm planları siler, kısa süreli CPU artışına yol açar ve sorunun kanıtını yok eder. Kötü bir planı hedefli olarak kaldırmak ya da Query Store ile iyi planı zorlamak daha doğrudur.
Hayır. Kirli okuma, satırları iki kez okuma ya da atlama gibi tutarsız sonuçlara yol açabilir. Okuma-yazma çakışmaları için RCSI daha güvenli bir çözümdür.
Doğrudan değil. Öneriler tek bir sorguya göre üretilir; mevcut index’lerle birleştirilerek ve yazma yüküne etkisi düşünülerek değerlendirilmelidir.

SQL Server Performans Danışmanlığı

Tahminle değil, ölçümle iyileştirin

Aryasoft’un kıdemli DBA ekibi sorunu bekleme istatistikleri, execution plan’lar ve baseline ile bulur; her değişikliği ölçerek uygular ve yedek ile CHECKDB gibi temel güvenceleri de kontrol eder.

4.7/5