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’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.
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);
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)
Çö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;
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)
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.
lrfultwtelupouunlurkzjohutwigw