Incremental Statistics Nedir

25 Eki by NURULLAH ÇAKIR

Incremental Statistics Nedir

SQL Server 2014 ile gelen bir özelliktir. Eğer veritabanınızda partition varsa çok işinize yarayabilir. Partition yoksa bir işinize yaramayacaktır. Auto Update Statistics’i True yaparsanız tablodaki satır değişikliği %20’yi geçtiğinde istatistikler güncelleniyordu. Auto Create Incremental Statistics’i True yaparsanız bu işlem partition bazında gerçekleşir. Büyük veritabanlarında istatistik güncelleme işlemini partition bazında yaparak istatistik güncellemenin sisteme getireceği yükü azaltabilirsiniz.

 

Aşağıdaki script yardımıyla veritabanı seviyesinde auto create incremental statistics’i true yapabilirsiniz. Bu işlemi gerçekleştirdikten sonra artık veritabanı seviyesinde partition yapılmış tablolarda yeni bir istatistik oluşacağı zaman incremental yapıda oluşacaktır.

ALTER DATABASE test
SET AUTO_CREATE_STATISTICS ON ( INCREMENTAL = ON )

 

 

Mevcut bir istatistiğin incremental yapıda olup olmadığını aşağıdaki sorgu yardımıyla öğrenebilirsiniz.

USE AdventureWorks2014Yeni
GO
SELECT
    OBJECT_NAME(object_id) TableName
   ,name
   ,is_incremental
   ,stats_id
FROM sys.stats
WHERE name = 'PK_EmployeeID'

 

 

Aşağıdaki script yardımıyla da bir istatistiği  partition bazında update edebilirsiniz.

 

 

UPDATE STATISTICS [VeritabaniAdi].[SemaAdi].[TabloAdi]
(IstatistikAdi) WITH RESAMPLE ON PARTITIONS(1)

 

 

Eğer istatistik incremental yapıda değilse aşağıdaki gibi hata alırsınız.

 

Msg 9111, Level 16, State 1, Line 13

UPDATE STATISTICS ON PARTITIONS syntax is not supported for non-incremental statistics.

 

Aşağıdaki script yardımıyla da mevcut bir istatistiği incremental yapıya geçirebilirsiniz.  Bu script’i çalıştırdıktan sonra artık yukardaki hatayı almadan partition yapılmış tablolardaki istatistiklerinizi partition bazında update edebileceksiniz.

 

UPDATE STATISTICS [EBYSDB].[dbo].[DocumentAttachment]
(IX_DocumentAttachment_DocumentId) WITH INCREMENTAL = ON

Veritabanındaki tüm partition yapılmış tablolardaki tüm istatistikler için yukardaki script’i veren script’i aşağıda bulabilirsiniz. Script’te AND tbl.name=’TabloIsmi’ kısmının başındaki – – işaretini kaldırıp TabloIsmi yerine bir tablo ismi yazarsanız sadece ilgili tablo için gerekli script’i çıkaracaktır.

 

SELECT DISTINCT 'UPDATE STATISTICS ' + QUOTENAME(object_name(s.object_id)) + ' (' + QUOTENAME(s.name) + ') WITH INCREMENTAL = ON'
FROM sys.tables tbl
INNER JOIN sys.indexes ind
ON tbl.object_id = ind.object_id
INNER JOIN sys.data_spaces ds
ON ind.data_space_id = ds.data_space_id
INNER JOIN sys.stats s
ON ind.object_id = s.object_id
WHERE ds.type = 'PS' --AND tbl.name='TabloIsmi'
AND s.is_incremental = 0

 

İstatistikler hakkında daha detaylı bilgi almak için “SQL Server’da İstatistik Kavramı ve Performansa Etkisi” isimli makaleyi okumanızı tavsiye ederim.

 

Bir istatistiğin verileri dağıtımı hakkında detaylı bilgi almak içinde “DBCC SHOW_STATISTICS Nedir ve Nasıl Kullanılır” isimli makaleyi okumanızı tavsiye ederim.

Loading

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir