UPDATE STATISTICS Nedir
Bu makalede istatistik, tablo ya da veritabanı bazında istatistiklerinizi UPDATE STATISTICS komutuyla nasıl güncelleyebileceğimizi anlatacağım. Bu makaleden önce “SQL Server’da İstatistik Kavramı ve Performansa Etkisi” isimli makaleyi okumanızı öneririm.
Aşağıdaki script yardımıyla HumanResources şemasındaki Department tablosunda bulunan AK_Department_Name isimli index’e ait istatistiği güncelleyelebilirsiniz.
USE AdventureWorks2014Yeni GO UPDATE STATISTICS [HumanResources].[Department] [AK_Department_Name] GO
Aşağıdaki script yardımıyla HumonResource şemasındaki Department tablosundaki tüm istatistikleri güncelleyebilirsiniz.
USE AdventureWorks2014Yeni GO UPDATE STATISTICS [HumanResources].[Department] GO
Aşağıdaki script yardımıyla da veritabanındaki tüm istatistikleri güncelleyebilirsiniz.
USE AdventureWorks2014Yeni GO EXEC sp_updatestats
İstatistikleri güncellerken aşağıdaki 3 seçenekle güncelleme yöntemini belirleyebilirsiniz.
- FULLSCAN
- SAMPLE
- RESAMPLE
FULLSCAN: Bu yöntemde istatistiğin bağlı olduğu tablo ya da indexed view’deki tüm satırları tarayarak istatistiği günceller. Bir istatistiği update etmek için aşağıdaki şekilde çalıştırabilirsiniz.
USE AdventureWorks2014Yeni GO UPDATE STATISTICS [HumanResources].[Department] [AK_Department_Name] WITH FULLSCAN GO
SAMPLE: SAMPLE ifadesinden sonra belirttiğiniz satır sayısı ya da yüzde kadar satırı örnek alarak istatistiği günceller. Bir istatistiği update etmek için aşağıdaki şekillerde çalıştırabilirsiniz.
--tablodaki satır sayısı 16 iken ben 10 satırı örnek alarak bu istatistiği güncellemesini istedim. --tablodaki satır sayısını Select Count(*) FROM [HumanResources].[Department] ile ya da --sp_spaceused '[HumanResources].[Department]' sonucunda gelen rows kısmından öğrenebilirsiniz. USE AdventureWorks2014Yeni GO UPDATE STATISTICS [HumanResources].[Department] [AK_Department_Name] WITH SAMPLE 10 rows GO
--Aşağıdaki script ile de istatistiğin bağlı olduğu tablo ya da indexed view'deki --satır sayısının %50'sini örnek alarak istatistiği güncelliyor. USE AdventureWorks2014Yeni GO UPDATE STATISTICS [HumanResources].[Department] [AK_Department_Name] WITH SAMPLE 50 PERCENT GO
RESAMPLE: İstatistiği en son örnek alınan oranı baz alarak günceller. Fakat önceki sefer WITH FULLSCAN ile güncellediyseniz RESAMPLE ile çalıştırdığınızda istatistiği FULLSCAN ile güncelleyecektir.
Ben bu parametreyi çok tavsiye etmiyorum. Çünkü geçmişte sorun çözmek için bir istatistiği WITH FULLSCAN ile güncellemiş olabilirsiniz. Normal bakım job’larını kullanarak RESAMPLE ile istatistikleri güncellediğinizde bu istatistik sürekli olarak WITH FULLSCAN ile güncellenecek ve gereksiz yere istatistik güncelleme job’ını uzatacaktır.
Aşağıdaki şekilde çalıştırabilirsiniz.
USE AdventureWorks2014Yeni GO UPDATE STATISTICS [HumanResources].[Department] [AK_Department_Name] WITH RESAMPLE GO
Veritabanı bazında da aşağıdaki şekilde tüm istatistikleri RESAMPLE parametresiyle güncelleyebilirsiniz.
EXEC sp_updatestats RESAMPLE
NOT: Benim tavsiyem bir problem olmadığı sürece istatistikleri herhangi bir parametre vermeden default olarak güncellemenizdir. Çünkü SQL Server Query Optimizer, en iyi query plan’ı oluşturmak için örneklenmesi gereken satır sayısını kendi belirler.
Bir istatistik hakkında detaylı bilgi almak için DBCC SHOW STATISTICS komutunu çalıştırabilirsiniz. “DBCC SHOW_STATISTICS Nedir ve Nasıl Kullanılır” isimli makalede detayları bulabilirsiniz.