SQL Server neden bu istatistikleri tam tarama dışında bir şeyle güncelleştirmeyi reddediyor?


13

Bir günlük datawarehouse derlemede nispeten uzun çalışan (20 dakika +) otomatik güncelleme istatistik işlemi fark ettim. İlgili tablo

CREATE TABLE [dbo].[factWebAnalytics](
    [WebAnalyticsId] [bigint] IDENTITY(1,1) NOT NULL,
    [MarketKey] [int] NOT NULL CONSTRAINT [DF_factWebAnalytics_MarketKey]  DEFAULT ((-1)),
    /*Other columns removed*/
 CONSTRAINT [PK_factWebAnalytics] PRIMARY KEY CLUSTERED 
(
    [MarketKey] ASC,
    [WebAnalyticsId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [MarketKeyPS]([MarketKey])
) ON [MarketKeyPS]([MarketKey])

Bu, Microsoft SQL Server 2012 (SP1) - 11.0.3513.0 (X64) üzerinde çalıştığından yazılabilir sütun deposu dizinleri kullanılamaz.

Tabloda iki ayrı Market anahtarı için veriler bulunmaktadır. Yapı, belirli bir MarketKey için bölümü bir hazırlama tablosuna geçirir, sütun deposu dizinini devre dışı bırakır, gerekli yazma işlemlerini gerçekleştirir, sütun deposunu yeniden oluşturur, sonra yeniden açar.

Güncelleme istatistiklerinin yürütme planı, tüm satırları tablodan çıkardığını, sıraladığını, tahmini satır sayısını çok yanlış aldığını ve tempdbdökülme seviyesi 2'ye döktüğünü göstermektedir .

resim açıklamasını buraya girin

Koşu

SELECT [s].[name] AS "Statistic",
       [sp].*
FROM   [sys].[stats] AS [s]
       OUTER APPLY sys.dm_db_stats_properties ([s].[object_id], [s].[stats_id]) AS [sp]
WHERE  [s].[object_id] = OBJECT_ID(N'[dbo].[factWebAnalytics]'); 

Gösteriler

resim açıklamasını buraya girin

Açıkça denemek ve bu dizinin istatistiklerinin örnek boyutunu diğerlerinin kullandığı

UPDATE STATISTICS [dbo].[factWebAnalytics] [PK_factWebAnalytics] WITH SAMPLE 897667 ROWS

Sorgu yeniden 20 dakika + boyunca çalışır ve yürütme planı, istenen 897,667 örneğini değil tüm satırları işlediğini gösterir.

Tüm bunların sonunda oluşturulan istatistikler çok ilginç değil ve kesinlikle tam bir tarama için harcanan zamanı garanti etmiyor gibi görünüyor.

Statistics for INDEX 'PK_factWebAnalytics'.
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Name                            Updated                         Rows                            Rows Sampled                    Steps                           Density                         Average Key Length              String Index                    
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
PK_factWebAnalytics             Jan 22 2016 11:31AM             420072086                       420072086                       2                               0                               12                              NO                                                              420072086                       

All Density                     Average Length                  Columns                         
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
0.5                             4                               MarketKey                       
2.380544E-09                    12                              MarketKey, WebAnalyticsId       

Histogram Steps                 
RANGE_HI_KEY                    RANGE_ROWS                      EQ_ROWS                         DISTINCT_RANGE_ROWS             AVG_RANGE_ROWS                  
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1                               0                               3.441652E+08                    0                               1                               
2                               0                               7.590685E+07                    0                               1                               

Neden bu davranışla karşılaştığım ve NORECOMPUTEbunlarda kullanmaktan başka hangi adımları atabileceğim hakkında herhangi bir fikir ?


Bir repro betiği burada . Kümelenmiş bir PK ve bir sütun deposu dizinine sahip bir tablo oluşturur ve PK istatistiklerini düşük bir örnek boyutuyla güncellemeye çalışır. Bu, bölümleme özelliğinin gerekli olmadığını gösteren bölümleme kullanmaz. Bununla birlikte, yukarıda açıklanan bölümlemenin kullanılması, bölümün kapatılması ve daha sonra tekrar (başka bir değişiklik yapılmaksızın) geri getirilmesi, bölümdeki satır sayısını iki katına çıkararak modifikasyon_sayıcısını artıracak ve böylece istatistiklerin eski ve otomatik olarak güncellenir.

KB2986627'de belirtildiği gibi tabloya kümelenmemiş bir dizin eklemeyi denedim.

Repro, 11.0.6020.0 derlemesinde sorunlu davranışı göstermedi ve SP3'e yükselttikten sonra sorun düzeltildi.

Yanıtlar:


10

Deneyeceğim ilk şey, şu anda sahip olduğunuz QFE ile SP1 CU16'dan SQL Server örneğini SP3 CU1'e (şu anki 2012 derlemesi) güncellemek ve ardından davranışın aynı olup olmadığını tekrar test etmektir.

Örneğin:

Düzeltme: UPDATE İSTATİSTİK SQL Server sütun mağaza dizini olan bir tablo için yanlış örnekleme ve işleme gerçekleştirir

... ilk olarak SP2 CU2'de piyasaya sürülmüş olabilir.

Bununla birlikte, 2012 sütun deposunun örneklenen istatistikler için gerekli tablesample'yi destekleyip desteklemediğinden emin değilim. Soruda bir repro mevcut olduğunda bu cevabı güncelleyeceğim.


1
(Son paragrafla ilgili olarak) SELECT WebAnalyticsId, MarketKey from [dbo].[factWebAnalytics] TABLESAMPLE (897667 ROWS) ORDER BY MarketKey, WebAnalyticsIdbenim için 30 saniyeden daha kısa sürede çalışıyor. Yine de columntore dizinini kullanmaz. Kümelenmiş dizini kullanır.
Martin Smith

2
Evet, kesinlikle sonraki sürümlerde düzeltilmiş bir şeye benziyor. Burada basit bir repro ürettim pastebin.com/7f4TwmKW ve 11.0.5343.0 çalıştıran bir test sunucusunda 10.000 satırlık örneklem için isteğimin yoksayıldığını ve 8.000.000 satırın tümü i.stack.imgur.com/DbbjZ.png (plan sorusuyla aynı) - Ama Microsoft SQL Server 2012 (SP3) (KB3072779) - 11.0.6020.0'da (bu örnekte sıralanan satır sayısı, tahmin edilen satır sayısına oldukça yakın olan 274.649) karşılaşmıyorum önceki yapı ve plan sütun mağazasından ziyade CI kullanıyor.)
Martin Smith
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.