Memory Optimized Tablolarda Otomatik İstatik Güncellemesi Aktif mi?

3 Kas by NURULLAH ÇAKIR

Memory Optimized Tablolarda Otomatik İstatik Güncellemesi Aktif mi?

SQL Server 2016 ile Memory Optimized Tablolarda otomatik istatistik güncellemesi desteği geldi. Eğer veritabanı, compatibility level’i 130 olarak oluşturulduysa herhangi bir şey yapmak gerekmiyor. Ama veritabanı daha önceki bir compatibility level ile oluşturulduysa compatibility level’i 130’a çekildikten sonra istatistikleri manual olarak bir kere güncellemek gerekiyor.

 

Compatibility level ile ilgili “Compatibility Level Nedir Ve Nasıl Değiştirilir” isimli makale ilginizi çekebilir.

 

İstatistikler hakkında aşağıdaki makaleleri de okumanızı tavsiye ederim.

 

SQL Server’da İstatistik Kavramı ve Performansa Etkisi“,

UPDATE STATISTICS Nedir“,

DBCC SHOW_STATISTICS Nedir ve Nasıl Kullanılır

 

Veritabanında otomatik istatistik güncellemenin aktif olup olmadığını sorgulamanız gerekir. Aktif değilse aktif etmelisiniz. Veritabanı üzerinde sağ tıklayarak properties dedikten sonra options sekmesinden Auto Update Statistics’in True olup olmadığını görebilirsiniz.

 

ALTER DATABASE veritabanisminiz SET AUTO_UPDATE_STATISTICS ON;

 

 

Aşağıdaki script yardımıyla memory optimized tablolarda otomatik güncellemenin aktif olup olmadığını sorgulayabilirsiniz.

SELECT
    QUOTENAME(SCHEMA_NAME(tbl.schema_id)) + N'.' + QUOTENAME(tbl.name) AS [tablo_ismi],
    st.name AS [istatistik ismi],
    CASE  1-st.no_recompute
    WHEN 0 THEN 'HAYIR'
    WHEN 1 THEN 'EVET'
    END AS [otomatik güncelleme aktif mi?]
FROM sys.stats st JOIN sys.tables tbl ON st.object_id=tbl.object_id
WHERE tbl.is_memory_optimized=1

 

 

Eğer otomatik güncelleştirme kapalıysa manaul olarak istatistikleri güncellemek için aşağıdaki script’i kullanabilirsiniz. Sorgu size bir script verecektir. Bu script’i çalıştırmalısınız.

DECLARE @sorgu NVARCHAR(MAX) = N'';
SELECT
      @sorgu += N'UPDATE STATISTICS '
      + quotename(schema_name(tbl.schema_id))
      + N'.'
      + quotename(tbl.name)
      + ';' + CHAR(13) + CHAR(10)
   FROM sys.tables AS tbl
   WHERE tbl.is_memory_optimized = 1 AND
   tbl.object_id IN (SELECT object_id FROM sys.stats WHERE no_recompute=1)

SELECT @sorgu

 

 

Son olarak istatistik güncellennmesinden faydalanabilmesi için Natively compiled stored procedure’leri de manual olarak recompile etmelisiniz.

 

Loading

Bir yanıt yazın

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