Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir:SQL Server
Azure SQL Veritabanı
Azure SQL Yönetilen Örneği
Azure Synapse Analytics
Analytics Platform Sistemi (PDW)
SQL analiz uç noktası microsoft fabric
Ambarı'nda Microsoft Fabric
SQL veritabanında Microsoft Fabric
Tablo veya dizinli görünümde sorgu iyileştirme 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_STATISTICS
daha 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 ROWS
sayı 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 SAMPLE
FULLSCAN
belirtilmediğinde, sorgu iyileştiricisi örneklenmiş verileri kullanır ve örnek boyutunu varsayılan olarak hesaplar.
veya 0 PERCENT
belirtilmesine 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.
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 ON
istatistikler, ö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
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_PERCENT
gü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_STATISTICS
devre 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
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 STATISTICS
ne 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ğiSTATS_STREAM
,ROWCOUNT
vePAGECOUNT
seçenekleriyle uyumlu değildir.MAXDOP
seçeneği, kullanılıyorsa Resource Governor iş yükü grubuMAX_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;
İlgili içerik
- İstatistikleri
- Microsoft Fabric'da
İstatistikleri - ALTER DATABASE (Transact-SQL)
- sys.dm_db_stats_properties (Transact-SQL)
- sys.dm_db_stats_histogram (Transact-SQL)
- CREATE STATISTICS (Transact-SQL)
- DBCC SHOW_STATISTICS (Transact-SQL)
- DROP STATISTICS (Transact-SQL)
- sp_autostats (Transact-SQL)
- sp_updatestats (Transact-SQL)
- STATS_DATE (Transact-SQL)