# Statistics Güncelleme Stratejisi ve Değişiklik Yönetimi

İstatistikler sorgu optimizasyonunun temeli. Doğru istatistik doğru execution plan demek. Yanlış ya da eskimiş istatistik ise performans krizine davetiye. Ama istatistik güncellemesi de bir değişiklik. Ve değişiklik yönetimi olmadan yapıldığında beklenmedik sonuçlar doğurabilir.

İstatistik Neden Bu Kadar Önemli? Query Optimizer, bir sorgunun nasıl çalıştırılacağına karar verirken istatistiklere bakar. Tablodaki veri dağılımı, satır sayısı, değer tekrar sıklığı — bunların tamamı istatistiklerde tutulur. İstatistikler eskidikçe optimizer yanlış tahminler yapar. Yanlış tahmin yanlış plan. Yanlış plan yavaş sorgu.

İstatistiklerin Durumunu İnceleme sql-- Eskimiş istatistikleri tespit et SELECT OBJECT\_NAME(s.object\_id) AS TabloAdi, s.name AS IstatistikAdi, sp.last\_updated AS SonGuncelleme, sp.rows AS ToplamSatir, sp.rows\_sampled AS OrnekSatir, sp.modification\_counter AS DegisiklikSayisi FROM sys.stats s CROSS APPLY sys.dm\_db\_stats\_properties(s.object\_id, s.stats\_id) sp WHERE sp.modification\_counter > 1000 OR sp.last\_updated < DATEADD(DAY, -7, GETDATE()) ORDER BY sp.modification\_counter DESC; sql-- Tablo bazında istatistik özeti SELECT t.name AS TabloAdi, COUNT(s.stats\_id) AS IstatistikSayisi, MIN(sp.last\_updated) AS EnEskiGuncelleme, MAX(sp.modification\_counter) AS MaxDegisiklik FROM sys.tables t JOIN sys.stats s ON t.object\_id = s.object\_id CROSS APPLY sys.dm\_db\_stats\_properties(s.object\_id, s.stats\_id) sp GROUP BY t.name ORDER BY MAX(sp.modification\_counter) DESC;

Otomatik İstatistik Güncelleme ve Riskleri SQL Server varsayılan olarak istatistikleri otomatik günceller. Bu genellikle iyi bir şey. Ama bazı durumlarda sorun yaratır. Otomatik güncelleme zamanlaması İstatistik güncelleme tam bir sorgu çalışırken tetiklenirse o sorgu güncelleme tamamlanana kadar bekler. Büyük tablolarda bu bekleme dakikalarca sürebilir. Asenkron güncelleme AUTO\_UPDATE\_STATISTICS\_ASYNC aktif edildiğinde güncelleme arka planda gerçekleşir. Sorgu beklemiyor ama güncel istatistikle başlamıyor. Bu ayarın değiştirilmesi de bir yapılandırma değişikliği.

Manuel İstatistik Güncelleme Stratejisi Kritik tablolar için manuel istatistik güncelleme job'ı kurmak daha kontrollü bir yaklaşım. sql-- Tek tablo tüm istatistiklerini güncelle UPDATE STATISTICS dbo.Siparisler WITH FULLSCAN;

\-- Tek istatistiği güncelle UPDATE STATISTICS dbo.Siparisler IX\_Siparisler\_MusteriID WITH FULLSCAN;

\-- Tüm veritabanı istatistiklerini güncelle EXEC sp\_updatestats; WITH FULLSCAN tüm veriyi tarar, daha doğru istatistik üretir ama daha uzun sürer. WITH SAMPLE 30 PERCENT örnekleme yapar, daha hızlı ama daha az kesin.

İstatistik Güncelleme Sonrası Plan Değişimi Riski İstatistik güncellendikten sonra Query Optimizer bazı sorgular için farklı execution plan seçebilir. Yeni plan çoğunlukla daha iyi ama her zaman değil. Bu nedenle büyük istatistik güncellemeleri sonrasında kritik sorguların performansı izlenmeli. sql-- İstatistik güncellemesi sonrası plan cache'ini temizle -- DİKKAT: Tüm planlar temizlenir, dikkatli kullanın -- DBCC FREEPROCCACHE;

\-- Sadece belirli bir veritabanının planlarını temizle ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE\_CACHE;

Değişiklik Yönetimiyle İlişkisi İstatistik stratejisinde yapılan değişiklikler değişiklik yönetim kapsamına girmeli:

Otomatik istatistik güncelleme açılıyor/kapatılıyor Asenkron güncellemeye geçiliyor Manuel güncelleme job'u oluşturuluyor veya değiştiriliyor Örnekleme oranı değiştiriliyor

Bunların tamamı performance'ı etkilediğinden test ortamında doğrulanmalı ve onay sürecinden geçmeli.

Sonuç İstatistikler görünmez ama sorgu performansını doğrudan etkileyen kritik yapılar. Güncelleme stratejisi değişiklik yönetiminin bir parçası olarak ele alındığında hem performans hem istikrar korunur. Detaylı bilgi için: sqlchangeguard.com
