Statistics Güncelleme Stratejisi ve Değişiklik Yönetimi
I’m a passionate software engineer specializing in SQL change management, database security, and DevOps automation. With over 17 years of experience in the banking sector, I focus on building tools and processes that make database deployments safer, more auditable, and automated.
As the creator of SQL Change Guard, I develop solutions that use risk scoring and AI-powered code analysis to detect dangerous SQL scripts before they reach production. I’m dedicated to helping teams minimize downtime and data loss through smarter change governance.
When I’m not coding, I enjoy sharing insights about secure development practices, WPF desktop applications, and integrating modern CI/CD pipelines.
Feel free to connect or reach out at info@sqlchangeguard.com
İ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
