Aracılığıyla paylaş


İSTATISTIĞI GÜNCELLEŞTIR (Transact-SQL)

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen ÖrneğiAzure Synapse AnalyticsAnalytics Platform Sistemi (PDW)SQL analiz uç noktası microsoft fabricAmbarı'nda Microsoft FabricSQL veritabanında Microsoft Fabric

Tablo veya dizinli görünümde sorgu iyileştirme istatistikleri güncelleştirir. Varsayılan olarak, sorgu iyileştiricisi sorgu planını geliştirmek için istatistikleri gerektiği gibi güncelleştirir; bazı durumlarda, istatistikleri varsayılan güncelleştirmelerden daha sık güncelleştirmek için UPDATE STATISTICS veya saklı yordam sp_updatestats kullanarak sorgu performansını geliştirebilirsiniz.

İstatistiklerin güncelleştirilmesi sorguların up-totarih istatistikleriyle derlenmesini sağlar. İstatistikleri herhangi bir işlem aracılığıyla güncelleştirmek sorgu planlarının otomatik olarak yeniden derlenmesine neden olabilir. Sorgu planlarını geliştirmek ve sorguları yeniden derlemek için gereken süre arasında bir performans dengelemesi olduğundan istatistikleri çok sık güncelleştirmemenizi öneririz. Belirli dengeler uygulamanıza bağlıdır. UPDATE STATISTICS, istatistik oluşturmaya yönelik satır örneğini sıralamak için tempdb kullanabilir.

Not

Microsoft Fabric'teki istatistikler hakkında daha fazla bilgi için bkz. Doku veri ambarında istatistikler.

Transact-SQL söz dizimi kuralları

Sözdizimi

SQL Server ve Azure SQL Veritabanı için söz dizimi.

UPDATE STATISTICS table_or_indexed_view_name
    [
        {
            { index_or_statistics__name }
          | ( { index_or_statistics_name } [ , ...n ] )
                }
    ]
    [ WITH
        [
            FULLSCAN
              [ [ , ] PERSIST_SAMPLE_PERCENT = { ON | OFF } ]
            | SAMPLE number { PERCENT | ROWS }
              [ [ , ] PERSIST_SAMPLE_PERCENT = { ON | OFF } ]
            | RESAMPLE
              [ ON PARTITIONS ( { <partition_number> | <range> } [ , ...n ] ) ]
            | <update_stats_stream_option> [ , ...n ]
        ]
        [ [ , ] [ ALL | COLUMNS | INDEX ]
        [ [ , ] NORECOMPUTE ]
        [ [ , ] INCREMENTAL = { ON | OFF } ]
        [ [ , ] MAXDOP = max_degree_of_parallelism ]
        [ [ , ] AUTO_DROP = { ON | OFF } ]
    ] ;

<update_stats_stream_option> ::=
    [ STATS_STREAM = stats_stream ]
    [ ROWCOUNT = numeric_constant ]
    [ PAGECOUNT = numeric_constant ]

Azure Synapse Analytics ve Paralel Veri Ambarı söz dizimi.

UPDATE STATISTICS [ schema_name . ] table_name
    [ ( { statistics_name | index_name } ) ]
    [ WITH
       {
              FULLSCAN
            | SAMPLE number PERCENT
            | RESAMPLE
        }
    ]
[;]

Microsoft Fabric için söz dizimi.

UPDATE STATISTICS [ schema_name . ] table_name
    [ ( { statistics_name } ) ]
    [ WITH
       {
              FULLSCAN
            | SAMPLE number PERCENT
        }
    ]
[;]

Not

Bu söz dizimi, Azure Synapse Analytics'teki sunucusuz SQL havuzu tarafından desteklenmez.

Bağımsız değişken

table_or_indexed_view_name

İstatistik nesnesini içeren tablonun veya dizine alınan görünümün adı.

index_or_statistics_name veya statistics_name | index_name veya statistics_name

İstatistikleri güncelleştirmek için dizinin adı veya güncelleştirilecek istatistiklerin adı. index_or_statistics_name veya statistics_name belirtilmezse, sorgu iyileştiricisi tablo veya dizinli görünüm için tüm istatistikleri güncelleştirir. Buna deyimi kullanılarak CREATE STATISTICS oluşturulan istatistikler, açık olduğunda AUTO_CREATE_STATISTICS oluşturulan tek sütunlu istatistikler ve dizinler için oluşturulan istatistikler dahildir.

hakkında AUTO_CREATE_STATISTICSdaha fazla bilgi için bkz. ALTER DATABASE SET Options. Bir tablo veya görünümün tüm dizinlerini görüntülemek için sp_helpindexkullanabilirsiniz.

FULLSCAN

Tablodaki veya dizinli görünümdeki tüm satırları tarayarak istatistikleri hesaplama. FULLSCAN ve SAMPLE 100 PERCENT aynı sonuçlara sahip olur. FULLSCAN seçeneğiyle SAMPLE kullanılamaz.

ÖRNEK sayısı { YÜZDE | SATIRSAY }

Sorgu iyileştiricinin istatistikleri güncelleştirirken kullanması için tablodaki veya dizinli görünümdeki satırların yaklaşık yüzdesini veya sayısını belirtir. içinPERCENT, sayı 0 ile 100 arasında olabilir ve için ROWSsayı 0'dan toplam satır sayısına kadar olabilir. Sorgu iyileştirici örneklerinin gerçek yüzde değeri veya satır sayısı, belirtilen yüzde veya sayıyla eşleşmeyebilir. Örneğin, sorgu iyileştiricisi bir veri sayfasındaki tüm satırları tarar.

SAMPLE , varsayılan örneklemeye göre sorgu planının en iyi durumda olmadığı özel durumlar için kullanışlıdır. Çoğu durumda, sorgu iyileştirici örnekleme kullandığından ve yüksek kaliteli sorgu planları oluşturmak için gereken istatistiksel olarak önemli örnek boyutunu varsayılan olarak belirlediğinden belirtmek gerekmez SAMPLE .

Not

SQL Server 2016'da (13.x) veritabanı uyumluluk düzeyi 130 kullanılırken, istatistik toplama performansını geliştirmek için istatistik oluşturmaya yönelik verilerin örneklemesi paralel olarak yapılır. Sorgu iyileştiricisi, tablo boyutu belirli bir eşiği aştığında paralel örnek istatistikleri kullanır. SQL Server 2017'den (14.x) başlayarak, veritabanı uyumluluk düzeyi ne olursa olsun, aşırı LATCH beklemelerle ilgili olası performans sorunlarını önlemek için davranış yeniden seri tarama kullanmaya döndürüldü. İstatistikleri güncelleştirirken sorgu planının geri kalanı uygunsa paralel yürütmeyi sürdürür.

SAMPLE seçeneğiyle FULLSCAN kullanılamaz. Ne belirtildiğinde ne de SAMPLEFULLSCAN belirtilmediğinde, sorgu iyileştiricisi örneklenmiş verileri kullanır ve örnek boyutunu varsayılan olarak hesaplar.

veya 0 PERCENTbelirtilmesine 0 ROWS karşı öneririz. 0 PERCENT veya 0 ROWS belirtildiğinde istatistik nesnesi güncelleştirilir ancak istatistik verileri içermez.

Çoğu iş yükü için tam tarama gerekmez ve varsayılan örnekleme yeterlidir. Ancak, çok çeşitli veri dağıtımlarına duyarlı olan bazı iş yükleri için daha fazla örnek boyutu ve hatta tam tarama gerekebilir. Tam tarama ile tahminler örneklenen taramadan daha doğru hale gelebilir ancak karmaşık planlar önemli ölçüde yararlı olmayabilir.

Daha fazla bilgi için bkz.Bileşenleri ve istatistik kavramları.

RESAMPLE

En son örnek oranını kullanarak her bir istatistiği güncelleştirin.

kullanmak RESAMPLE tam tablo taramasına neden olabilir. Örneğin, dizinlerin istatistikleri, örnek hızları için tam tablo taraması kullanır. Örnek seçeneklerden (SAMPLE, FULLSCAN, RESAMPLE) hiçbiri belirtilmediğinde, sorgu iyileştirici verileri örnekler ve varsayılan olarak örnek boyutunu hesaplar.

Microsoft Fabric'teki RESAMPLE Ambar'da desteklenmez.

PERSIST_SAMPLE_PERCENT = { ON | KAPALI }

Şunlar için geçerlidir: SQL Server 2016 (13.x) Service Pack 1 CU4, SQL Server 2017 (14.x) Service Pack 1 veya SQL Server 2019 (15.x) ve sonraki sürümleri, Azure SQL Veritabanı, Azure SQL Yönetilen Örneği

olduğunda ONistatistikler, örnekleme yüzdesini açıkça belirtmeyen sonraki güncelleştirmeler için ayarlanan örnekleme yüzdesini korur. olduğunda OFF, istatistik örnekleme yüzdesi, açıkça örnekleme yüzdesi belirtmeyen sonraki güncelleştirmelerde varsayılan örneklemeye sıfırlanır. Varsayılan değer: OFF.

DBCC SHOW_STATISTICS ve sys.dm_db_stats_properties seçili istatistik için kalıcı örnek yüzde değerini kullanıma sunar.

Yürütülürse AUTO_UPDATE_STATISTICS , varsa kalıcı örnekleme yüzdesini veya yoksa varsayılan örnekleme yüzdesini kullanır. RESAMPLE davranışı bu seçenekten etkilenmez.

Tablo kesilirse, kesilen yığın veya B ağacı (HoBT) üzerinde oluşturulan tüm istatistikler varsayılan örnekleme yüzdesini kullanmaya geri döner. Benzer şekilde, satır içermeyen bir nesnede istatistikler güncelleştirilirse, daha önce yapılandırılmış olsa PERSIST_SAMPLE_PERCENT bile varsayılan örnekleme yüzdesini kullanmaya geri döner.

Not

SQL Server'da, daha önce ile PERSIST_SAMPLE_PERCENTgüncelleştirilmiş istatistikleri olan bir dizin yeniden oluşturulurken kalıcı örnek yüzdesi varsayılana sıfırlanır. SQL Server 2016 (13.x) SP2 CU17, SQL Server 2017 (14.x) CU26 ve SQL Server 2019 (15.x) CU10'dan başlayarak, dizini yeniden oluştururken bile kalıcı örnek yüzdesi korunur.

ON PARTITIONS ( { <partition_number> | <range> } [ , ... n ] ) ]

için geçerlidir: SQL Server 2014 (12.x) ve sonraki sürümler

Yan tümcesinde ON PARTITIONS belirtilen bölümleri kapsayan yaprak düzeyi istatistiklerinin yeniden derlenip genel istatistikleri oluşturmak için birleştirilmesini zorlar. WITH RESAMPLE gereklidir çünkü farklı örnek oranlarıyla oluşturulmuş bölüm istatistikleri bir araya getirilemiyor.

TÜMÜ | SÜTUNLAR | DİZİN

Tüm mevcut istatistikleri, bir veya daha fazla sütunda oluşturulan istatistikleri veya dizinler için oluşturulan istatistikleri güncelleştirin. Seçeneklerden hiçbiri belirtilmezse, UPDATE STATISTICS deyimi tablodaki veya dizinli görünümdeki tüm istatistikleri güncelleştirir.

NORECOMPUTE

Belirtilen istatistikler için otomatik istatistik güncelleştirme seçeneğini AUTO_UPDATE_STATISTICSdevre dışı bırakın. Bu seçenek belirtilirse, sorgu iyileştiricisi bu istatistik güncelleştirmesini tamamlar ve gelecekteki güncelleştirmeleri devre dışı bırakır.

Seçenek davranışını yeniden etkinleştirmek AUTO_UPDATE_STATISTICS için seçeneği olmadan UPDATE STATISTICS yeniden çalıştırın NORECOMPUTE veya komutunu çalıştırınsp_autostats.

Uyarı

Bu seçeneğin kullanılması, en iyi olmayan sorgu planları oluşturabilir. Bu seçeneğin tedbirli bir şekilde ve ardından yalnızca nitelikli bir sistem yöneticisi tarafından kullanılmasını öneririz.

Seçeneği hakkında AUTO_STATISTICS_UPDATE daha fazla bilgi için bkz. ALTER DATABASE SET Options.

ARTıMLı = { ON | KAPALI }

için geçerlidir: SQL Server 2014 (12.x) ve sonraki sürümler

olduğunda ON, istatistikler bölüm istatistiklerine göre yeniden oluşturulur. olduğunda OFF, istatistik ağacı bırakılır ve SQL Server istatistikleri yeniden hesaplar. Varsayılan değer: OFF.

Bölüm başına istatistikler desteklenmiyorsa bir hata oluşturulur. Artımlı istatistikler aşağıdaki istatistik türleri için desteklenmez:

  • Temel tabloyla bölümle hizalanmamış dizinlerle oluşturulan istatistikler.
  • Always On okunabilir ikincil veritabanlarında oluşturulan istatistikler.
  • Salt okunur veritabanlarında oluşturulan istatistikler.
  • Filtrelenmiş dizinlerde oluşturulan istatistikler.
  • Görünümlerde oluşturulan istatistikler.
  • İç tablolarda oluşturulan istatistikler.
  • Uzamsal dizinler veya XML dizinleriyle oluşturulan istatistikler.

MAXDOP = max_degree_of_parallelism

için geçerlidir: SQL Server (SQL Server 2016 (13.x) SP2 ve SQL Server 2017 (14.x) CU3 ile başlayarak).

İstatistik işleminin max degree of parallelism süresi boyunca yapılandırma seçeneğini geçersiz kılar. Daha fazla bilgi için bkz. En yüksek paralellik derecesini yapılandırma Sunucu Yapılandırma Seçeneği. Paralel plan yürütmesinde kullanılan işlemci sayısını sınırlamak için kullanın MAXDOP . Maksimum değer 64 işlemcidir.

max_degree_of_parallelism olabilir:

1

Paralel plan oluşturmayı bastırır.

>1

Paralel istatistik işleminde kullanılan en fazla işlemci sayısını, geçerli sistem iş yüküne göre belirtilen sayı veya daha az ile kısıtlar.

0 (varsayılan)

Geçerli sistem iş yüküne göre gerçek işlemci sayısını veya daha azını kullanır.

update_stats_stream_option

Yalnızca bilgilendirme amacıyla tanımlanır. Desteklenmez. Gelecekteki uyumluluk garanti edilmemektedir.

AUTO_DROP = { ON | KAPALI }

için geçerlidir: SQL Server 2022 (16.x) ve sonraki sürümler

Şu anda, istatistikler bir müşteri veritabanındaki üçüncü taraf bir araç tarafından oluşturulduysa, bu istatistik nesneleri müşterinin istediği şema değişikliklerini engelleyebilir veya bu değişikliklere müdahale edebilir.

(SQL Server 2022 (16.x) ile başlayarak)| Bu özellik, bir şema değişikliğinin istatistikler tarafından engellenmesi değil, istatistikler bırakılacak şekilde bir modda istatistik nesnelerinin oluşturulmasını sağlar. Bu şekilde, otomatik bırakma istatistikleri otomatik oluşturulan istatistikler gibi davranır.

Not

Otomatik oluşturulan istatistiklerde Auto_Drop özelliğini ayarlamaya veya kaldırmaya çalışmak hatalara neden olabilir. Otomatik oluşturulan istatistikler her zaman otomatik bırakma özelliğini kullanır. Bazı yedeklemeler geri yüklendiğinde, istatistik nesnesinin bir sonraki güncelleştirilişine (el ile veya otomatik olarak) kadar bu özellik yanlış ayarlanmış olabilir. Ancak, otomatik oluşturulan istatistikler her zaman otomatik bırakma istatistikleri gibi davranır.

Açıklamalar

İSTATİSTİkLerİ NE ZAMAN GÜNCELLESTİĞİ

UPDATE STATISTICSne zaman kullanılacağı hakkında daha fazla bilgi için bkz. İstatistikleri güncelleştirme.

Sınırlama

  • İstatistiklerin güncelleştirilmesi dış tablolarda desteklenmez. Dış tablodaki istatistikleri güncelleştirmek için istatistikleri bırakın ve yeniden oluşturun.

  • Columnstore dizininde otomatik olarak oluşturulan istatistiklerin güncelleştirilmesi desteklenmez. Bu deneme 35337 hatasıyla sonuçlanır: UPDATE STATISTICS failed because statistics cannot be updated on a columnstore index. UPDATE STATISTICS is valid only when used with the STATS_STREAM option. Daha fazla bilgi için bkz. Dizin istatistikleri.

    Tek tek sütunlar veya sütun deposu dizininin sütun kümeleri ile ilgili istatistiklerin güncelleştirilmesi desteklenir.

  • MAXDOP seçeneği STATS_STREAM, ROWCOUNT ve PAGECOUNT seçenekleriyle uyumlu değildir.

  • MAXDOP seçeneği, kullanılıyorsa Resource Governor iş yükü grubu MAX_DOP ayarıyla sınırlıdır.

tüm istatistikleri sp_updatestats ile güncelleştirme

Veritabanındaki tüm kullanıcı tanımlı ve iç tabloların istatistiklerini güncelleştirme hakkında bilgi için sp_updatestatssaklı yordama bakın. Örneğin, aşağıdaki komut veritabanının tüm istatistiklerini güncelleştirmek için sp_updatestats çağırır.

EXECUTE sp_updatestats;

Otomatik dizin ve istatistik yönetimi

Dizin birleştirmeyi ve bir veya daha fazla veritabanının istatistik güncelleştirmelerini otomatik olarak yönetmek için Uyarlamalı Dizin Birleştirme gibi çözümleri kullanın. Bu yordam, diğer parametrelerin yanında bir dizini parçalanma düzeyine göre yeniden derlemeyi veya yeniden düzenlemeyi ve istatistikleri doğrusal bir eşikle güncelleştirmeyi otomatik olarak seçer.

Son İstatistik Güncelleştirmesini Belirleme

İstatistiklerin en son ne zaman güncelleştirildiğini belirlemek için STATS_DATE işlevini kullanın.

PDW / Azure Synapse Analytics

Aşağıdaki söz dizimi Analiz Platformu Sistemi (PDW) / Azure Synapse Analytics tarafından desteklenmez:

UPDATE STATISTICS t1 (a, b);
UPDATE STATISTICS t1 (a) WITH SAMPLE 10 ROWS;
UPDATE STATISTICS t1 (a) WITH NORECOMPUTE;
UPDATE STATISTICS t1 (a) WITH INCREMENTAL = ON;
UPDATE STATISTICS t1 (a) WITH STATS_STREAM = 0x01;

İzinler

Tablo veya görünümde ALTER izin gerektirir.

Örnekler

A. Tablodaki tüm istatistikleri güncelleştirme

Aşağıdaki örnek, SalesOrderDetail tablosundaki tüm istatistikleri güncelleştirir.

USE AdventureWorks2022;
GO

UPDATE STATISTICS Sales.SalesOrderDetail;
GO

B. Dizin istatistiklerini güncelleştirme

Aşağıdaki örnek, AK_SalesOrderDetail_rowguid tablosunun SalesOrderDetail dizininin istatistiklerini güncelleştirir.

USE AdventureWorks2022;
GO

UPDATE STATISTICS Sales.SalesOrderDetail (AK_SalesOrderDetail_rowguid);
GO

C. Yüzde 50 örnekleme kullanarak istatistikleri güncelleştirme

Aşağıdaki örnek, Name tablosundaki ProductNumber ve Product sütunlarının istatistiklerini oluşturur ve güncelleştirir.

USE AdventureWorks2022;
GO

CREATE STATISTICS Products
    ON Production.Product([Name], ProductNumber)
    WITH SAMPLE 50 PERCENT;

-- Time passes. The UPDATE STATISTICS statement is then executed.
UPDATE STATISTICS Production.Product (Products)
    WITH SAMPLE 50 PERCENT;

D. FULLSCAN ve NORECOMPUTE kullanarak istatistikleri güncelleştirme

Aşağıdaki örnek, Products tablosundaki Product istatistikleri güncelleştirir, Product tablosundaki tüm satırların tam taramasını zorlar ve Products istatistikleri için otomatik istatistikleri kapatır.

USE AdventureWorks2022;
GO

UPDATE STATISTICS Production.Product (Products)
    WITH FULLSCAN, NORECOMPUTE;
GO

Örnekler: Azure Synapse Analytics ve Analytics Platform Sistemi (PDW)

E. Tablodaki istatistikleri güncelleştirme

Aşağıdaki örnek, CustomerStats1 tablosundaki Customer istatistiklerini güncelleştirir.

UPDATE STATISTICS Customer (CustomerStats1);

F. Tam tarama kullanarak istatistikleri güncelleştirme

Aşağıdaki örnek, CustomerStats1 tablosundaki tüm satırları tarayarak Customer istatistiklerini güncelleştirir.

UPDATE STATISTICS Customer (CustomerStats1) WITH FULLSCAN;

G. Tablodaki tüm istatistikleri güncelleştirme

Aşağıdaki örnek, Customer tablosundaki tüm istatistikleri güncelleştirir.

UPDATE STATISTICS Customer;

H. AUTO_DROP ile CREATE STATISTICS kullanma

Otomatik bırakma istatistiklerini kullanmak için, istatistikleri oluşturma veya güncelleştirme işleminin "WITH" yan tümcesine aşağıdakileri eklemeniz gerekir.

UPDATE STATISTICS Customer (CustomerStats1) WITH AUTO_DROP = ON;