SQL Server Performans Sorunları İçin Pratik ve Etkili 10 Adım

SQL Server Performans Sorunları İçin Pratik ve Etkili 10 Adım (Gerçek Hayat Rehberi)

SQL Server Performans Sorunları İçin Pratik ve Etkili 10 Adım

Posted on Aralık 17, 2025 by Şaban ÇİÇEK
  SQL Server Performans Sorunları İçin Pratik ve Etkili 10 Adım

SQL Server Performans Sorunları İçin Pratik ve Etkili 10 Adım (Gerçek Hayat Rehberi)

Kısa özet:
SQL Server’da “veritabanı yavaş” denilen problemlerin büyük bölümü, yanlış sorgular, eksik indeksler ve yanlış yapılandırma kaynaklıdır. Aşağıdaki adımlar, sahada en çok fayda sağlayan ve hızlı sonuç veren iyileştirmeleri içerir.

1️⃣ En yavaş sorguları bul (Query Store)

Neden etkili?
Performans problemlerinin %70–80’i genellikle birkaç kötü sorgudan kaynaklanır. Query Store, hangi sorgunun ne kadar CPU, süre ve IO tükettiğini net şekilde gösterir.

Nereden açılır?
SSMS → Database → Properties → Query Store
Operation Mode: Read Write
Max Size / Data Flush Interval: ihtiyaca göre
SELECT TOP 20
    qsqt.query_sql_text,
    rs.avg_duration,
    rs.avg_cpu_time,
    rs.avg_logical_io_reads,
    rs.count_executions
FROM sys.query_store_runtime_stats rs
JOIN sys.query_store_plan p ON rs.plan_id = p.plan_id
JOIN sys.query_store_query q ON p.query_id = q.query_id
JOIN sys.query_store_query_text qsqt ON q.query_text_id = qsqt.query_text_id
ORDER BY rs.avg_duration DESC;
  

2️⃣ Doğru indeks ekle (Covering Index kullan)

Neden etkili?
Table Scan ve Key Lookup’ları azaltarak sorgu süresini saniyelerden milisaniyelere düşürebilir.

SELECT MusteriAdi, Telefon
FROM Musteriler
WHERE Sehir = 'İstanbul';
  
CREATE INDEX IX_Musteriler_Sehir
ON dbo.Musteriler(Sehir)
INCLUDE (MusteriAdi, Telefon);
  
✅ SQL, hem filtreyi indeksle yapar hem de tabloya dönmeden sonucu getirir.

3️⃣ İstatistikleri güncelle

Neden etkili?
SQL Server yanlış satır tahmini yaparsa yanlış execution plan seçer.

UPDATE STATISTICS dbo.Musteriler WITH FULLSCAN;
  
ALTER DATABASE [DB_ADI] SET AUTO_CREATE_STATISTICS ON;
ALTER DATABASE [DB_ADI] SET AUTO_UPDATE_STATISTICS ON;
  

4️⃣ SELECT * kullanma, SARGable yaz

Neden etkili?
Fonksiyonlu WHERE şartları indeks kullanımını tamamen bozar.

SELECT *
FROM Siparisler
WHERE YEAR(SiparisTarihi) = 2025;
  
SELECT SiparisId, MusteriId, SiparisTarihi
FROM Siparisler
WHERE SiparisTarihi >= '2025-01-01'
  AND SiparisTarihi <  '2026-01-01';
  

5️⃣ Execution Plan ile Scan / Key Lookup yakala

SSMS → Include Actual Execution Plan (Ctrl + M)

Key Lookup görüyorsan:
Çözüm genelde → doğru indeks + INCLUDE

6️⃣ TempDB performansını iyileştir

Neden etkili?
Sort, hash ve spill işlemleri tempdb’yi kullanır.

ALTER DATABASE tempdb ADD FILE (
 NAME = tempdev2,
 FILENAME = 'D:\SQLData\tempdb2.ndf',
 SIZE = 2048MB,
 FILEGROWTH = 512MB
);
  

7️⃣ Blocking (kilitlenme) sorunlarını azalt

SELECT
    r.session_id,
    r.blocking_session_id,
    r.wait_type,
    r.wait_time,
    t.text
FROM sys.dm_exec_requests r
CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) t
WHERE r.blocking_session_id <> 0;
  
Transaction’ları kısa tut, indeksleri düzelt, gerekirse RCSI kullan.

8️⃣ Autogrowth ayarlarını düzelt

  • Data: 512MB – 1024MB
  • Log: 256MB – 512MB
  • Başlangıç boyutu yeterli olsun

9️⃣ max server memory ayarını doğru yap

EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
EXEC sp_configure 'max server memory (MB)', 49152;
RECONFIGURE;
  

🔟 Büyük tablolarda arşiv / partition

Neden etkili?
200 milyon satırı her gün sorgulamak yerine sıcak / soğuk veriyi ayırırsın.

  • Yıllık tablolar (Siparisler_2024, Siparisler_2025)
  • Partitioning (edition uygunluğuna göre)
Son söz:
SQL Server performansı “tek ayarla” düzelmez. Ama bu 10 adımı sistemli uygularsan, çoğu ortamda %50–%90 arası performans kazanımı görmek mümkündür.
155 görüntülenme • 0 Yorum • Son Güncelleme: Aralık 17, 2025
Yorumlar 1
Yorum Yap
krkvunkujy 10 Şub 2026, 03:35

lrfultwtelupouunlurkzjohutwigw