UPDATE STATISTICS (Transact-SQL)
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
punkt końcowy analizy SQL w usłudze Microsoft Fabric
Warehouse w usłudze Microsoft Fabric
SQL Database w usłudze Microsoft Fabric
Aktualizuje optymalizację zapytań statystyk w tabeli lub widoku indeksowanym. Domyślnie optymalizator zapytań aktualizuje już statystyki w razie potrzeby w celu ulepszenia planu zapytania; w niektórych przypadkach można poprawić wydajność zapytań przy użyciu UPDATE STATISTICS
lub procedury składowanej sp_updatestats w celu częstszego aktualizowania statystyk niż aktualizacje domyślne.
Aktualizowanie statystyk zapewnia kompilowanie zapytań przy użyciu up-to-date statistics. Aktualizowanie statystyk za pośrednictwem dowolnego procesu może spowodować automatyczne ponowne skompilowanie planów zapytań. Zalecamy zbyt częste aktualizowanie statystyk, ponieważ występuje kompromis między ulepszaniem planów zapytań a czasem ponownego kompilowania zapytań. Konkretne kompromisy zależą od aplikacji.
UPDATE STATISTICS
może użyć tempdb
, aby posortować próbkę wierszy do tworzenia statystyk.
Nuta
Aby uzyskać więcej informacji na temat statystyk w usłudze Microsoft Fabric, zobacz Statystyki magazynowania danych w sieci szkieletowej.
Transact-SQL konwencje składni
Składnia
Składnia dla programu SQL Server i usługi Azure SQL Database.
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 ]
Składnia dla usług Azure Synapse Analytics i Parallel Data Warehouse.
UPDATE STATISTICS [ schema_name . ] table_name
[ ( { statistics_name | index_name } ) ]
[ WITH
{
FULLSCAN
| SAMPLE number PERCENT
| RESAMPLE
}
]
[;]
Składnia dla usługi Microsoft Fabric.
UPDATE STATISTICS [ schema_name . ] table_name
[ ( { statistics_name } ) ]
[ WITH
{
FULLSCAN
| SAMPLE number PERCENT
}
]
[;]
Nuta
Ta składnia nie jest obsługiwana przez bezserwerową pulę SQL w usłudze Azure Synapse Analytics.
Argumenty
table_or_indexed_view_name
Nazwa tabeli lub widoku indeksowanego, który zawiera obiekt statystyk.
index_or_statistics_name lub statistics_name | index_name lub statistics_name
Nazwa indeksu do aktualizowania statystyk lub nazwy statystyk do zaktualizowania. Jeśli nie określono index_or_statistics_name lub statistics_name, optymalizator zapytań aktualizuje wszystkie statystyki dla tabeli lub widoku indeksowanego. Obejmuje to statystyki utworzone przy użyciu instrukcji CREATE STATISTICS
, statystyki jednokolumna utworzone podczas AUTO_CREATE_STATISTICS
pracy i statystyki utworzone dla indeksów.
Aby uzyskać więcej informacji na temat AUTO_CREATE_STATISTICS
programu , zobacz ALTER DATABASE SET Options (OPCJE ALTER DATABASE SET). Aby wyświetlić wszystkie indeksy dla tabeli lub widoku, możesz użyć sp_helpindex.
FULLSCAN
Oblicz statystyki, przeskanując wszystkie wiersze w tabeli lub w widoku indeksowanym.
FULLSCAN
i SAMPLE 100 PERCENT
mają te same wyniki.
FULLSCAN
nie można używać z opcją SAMPLE
.
PRZYKŁADowa liczba { PERCENT | WIERSZE }
Określa przybliżoną wartość procentową lub liczbę wierszy w tabeli lub widoku indeksowanego, który ma być używany przez optymalizator zapytań podczas aktualizowania statystyk. W przypadku PERCENT
parametru liczba może wynosić od 0 do 100, a dla ROWS
parametru liczba może wynosić od 0 do całkowitej liczby wierszy. Rzeczywista wartość procentowa lub liczba wierszy, które próbki optymalizatora zapytań mogą nie być zgodne z określoną wartością procentową lub liczbą. Na przykład optymalizator zapytań skanuje wszystkie wiersze na stronie danych.
SAMPLE
jest przydatna w specjalnych przypadkach, w których plan zapytania oparty na domyślnym próbkowaniu nie jest optymalny. W większości sytuacji nie jest konieczne określenie SAMPLE
, ponieważ optymalizator zapytań używa próbkowania i domyślnie określa statystycznie znaczący rozmiar próbki, zgodnie z wymaganiami tworzenia planów zapytań wysokiej jakości.
Nuta
W programie SQL Server 2016 (13.x) podczas korzystania z poziomu zgodności bazy danych 130 próbkowanie danych do tworzenia statystyk odbywa się równolegle w celu zwiększenia wydajności zbierania statystyk. Optymalizator zapytań będzie używać równoległych statystyk próbki za każdym razem, gdy rozmiar tabeli przekroczy określony próg. Począwszy od programu SQL Server 2017 (14.x), niezależnie od poziomu zgodności bazy danych, zachowanie zostało zmienione z powrotem na użycie skanowania szeregowego w celu uniknięcia potencjalnych problemów z wydajnością z nadmiernymi LATCH
oczekiwaniami. Pozostała część planu zapytania podczas aktualizowania statystyk będzie obsługiwać wykonywanie równoległe, jeśli jest kwalifikowane.
SAMPLE
nie można używać z opcją FULLSCAN
. Jeśli ani SAMPLE
FULLSCAN
nie zostanie określony, optymalizator zapytań domyślnie używa próbkowanych danych i oblicza rozmiar próbki.
Zalecamy określenie parametru 0 PERCENT
lub 0 ROWS
. Gdy 0 PERCENT
obiekt statystyk jest aktualizowany, 0 ROWS
ale nie zawiera danych statystycznych.
W przypadku większości obciążeń pełne skanowanie nie jest wymagane, a domyślne próbkowanie jest odpowiednie. Jednak niektóre obciążenia, które są wrażliwe na bardzo różne dystrybucje danych, mogą wymagać zwiększonego rozmiaru próbki, a nawet pełnego skanowania. Chociaż szacunki mogą stać się dokładniejsze w przypadku pełnego skanowania niż skanowanie próbkowane, złożone plany mogą nie przynieść znacznej korzyści.
Aby uzyskać więcej informacji, zobacz Components and concepts of statistics.
PONOWNE PRÓBKOWANIE
Zaktualizuj każdą statystykę przy użyciu najnowszej częstotliwości próbkowania.
Użycie RESAMPLE
metody może spowodować skanowanie w pełnej tabeli. Na przykład statystyki indeksów używają pełnego skanowania tabeli pod kątem częstotliwości próbkowania. Jeśli żadna z przykładowych opcji (SAMPLE
, FULLSCAN
, RESAMPLE
) nie jest określona, optymalizator zapytań domyślnie próbkuje dane i oblicza rozmiar próbki.
W magazynie w usłudze Microsoft Fabric RESAMPLE
nie jest obsługiwane.
PERSIST_SAMPLE_PERCENT = { ON | WYŁ. }
Dotyczy: sql Server 2016 (13.x) z dodatkiem Service Pack 1 CU4, SQL Server 2017 (14.x) z dodatkiem Service Pack 1 lub SQL Server 2019 (15.x) i nowszymi wersjami, Azure SQL Database, Azure SQL Managed Instance
Gdy ON
statystyka zachowa procent próbkowania ustawionego dla kolejnych aktualizacji, które nie określają jawnie wartości procentowej próbkowania. Gdy OFF
wartość procentowa próbkowania statystyk zostanie zresetowana do domyślnego próbkowania w kolejnych aktualizacjach, które nie określają jawnie wartości procentowej próbkowania. Wartość domyślna to OFF
.
SHOW_STATISTICS DBCC i sys.dm_db_stats_properties uwidocznić utrwalone wartości procentu próby dla wybranej statystyki.
Jeśli AUTO_UPDATE_STATISTICS
jest wykonywane, używa utrwalonego procentu próbkowania, jeśli jest dostępny, lub użyj domyślnej wartości procentowej próbkowania, jeśli nie.
RESAMPLE
Nie ma to wpływu na zachowanie tej opcji.
Jeśli tabela zostanie obcięta, wszystkie statystyki utworzone na obciętej stercie lub B-tree (HoBT) zostaną przywrócone do korzystania z domyślnej wartości procentowej próbkowania. Podobnie jeśli statystyki są aktualizowane dla obiektu bez wierszy, przywraca domyślny procent próbkowania, nawet jeśli PERSIST_SAMPLE_PERCENT
został wcześniej skonfigurowany.
Nuta
W programie SQL Server podczas ponownego kompilowania indeksu, który wcześniej zawierał statystyki zaktualizowane PERSIST_SAMPLE_PERCENT
za pomocą polecenia , utrwalone procent próbki jest resetowany z powrotem do domyślnego. Począwszy od programu SQL Server 2016 (13.x) SP2 CU17, SQL Server 2017 (14.x) CU26 i PROGRAMU SQL Server 2019 (15.x) CU10, trwały procent próbki jest zachowywany nawet podczas odbudowywania indeksu.
W PARTYCJACH ( { <partition_number> | <range> } [ , ... n ] ) ]
Dotyczy: SQL Server 2014 (12.x) i nowsze wersje
Wymusza statystykę na poziomie liścia obejmującą partycje określone w klauzuli ON PARTITIONS
, które mają zostać ponownie skompilowane, a następnie scalone w celu utworzenia statystyk globalnych.
WITH RESAMPLE
jest wymagany, ponieważ nie można scalić statystyk partycji utworzonych z różnymi współczynnikami próbkowania.
WSZYSTKIE | KOLUMNY | INDEKS
Zaktualizuj wszystkie istniejące statystyki, statystyki utworzone na co najmniej jednej kolumnie lub statystyki utworzone dla indeksów. Jeśli żadna z opcji nie zostanie określona, UPDATE STATISTICS
instrukcja aktualizuje wszystkie statystyki dotyczące tabeli lub widoku indeksowanego.
NORECOMPUTE
Wyłącz opcję automatycznej aktualizacji statystyk , AUTO_UPDATE_STATISTICS
dla określonych statystyk. Jeśli ta opcja zostanie określona, optymalizator zapytań ukończy tę aktualizację statystyk i wyłączy przyszłe aktualizacje.
Aby ponownie włączyć AUTO_UPDATE_STATISTICS
zachowanie opcji, uruchom UPDATE STATISTICS
ponownie bez NORECOMPUTE
opcji lub uruchom polecenie sp_autostats
.
Ostrzeżenie
Użycie tej opcji umożliwia tworzenie nieoptymalnych planów zapytań. Zalecamy używanie tej opcji oszczędnie, a następnie tylko przez kwalifikowanego administratora systemu.
Aby uzyskać więcej informacji na temat AUTO_STATISTICS_UPDATE
opcji, zobacz ALTER DATABASE SET Options (OPCJE ALTER DATABASE SET).
INCREMENTAL = { ON | WYŁ. }
Dotyczy: SQL Server 2014 (12.x) i nowsze wersje
Gdy ON
statystyki są tworzone ponownie zgodnie ze statystykami partycji. Gdy OFF
drzewo statystyk zostanie usunięte, a program SQL Server ponownie oblicza statystyki. Wartość domyślna to OFF
.
Jeśli statystyki poszczególnych partycji nie są obsługiwane, zostanie wygenerowany błąd. Statystyki przyrostowe nie są obsługiwane w przypadku następujących typów statystyk:
- Statystyki utworzone za pomocą indeksów, które nie są dostosowane do partycji z tabelą podstawową.
- Statystyki utworzone w przypadku pomocniczych baz danych z możliwością odczytu zawsze włączone.
- Statystyki utworzone w bazach danych tylko do odczytu.
- Statystyki utworzone na podstawie filtrowanych indeksów.
- Statystyki utworzone w widokach.
- Statystyki utworzone w tabelach wewnętrznych.
- Statystyki utworzone za pomocą indeksów przestrzennych lub indeksów XML.
MAXDOP = max_degree_of_parallelism
Dotyczy: SQL Server (począwszy od programu SQL Server 2016 (13.x) SP2 i programu SQL Server 2017 (14.x) CU3).
max degree of parallelism
Zastępuje opcję konfiguracji na czas trwania operacji statystyki. Aby uzyskać więcej informacji, zobacz Configure the max degree of parallelism Server Configuration Option. Użyj MAXDOP
polecenia , aby ograniczyć liczbę procesorów używanych w równoległym wykonywaniu planu. Maksymalna wartość to 64 procesory.
max_degree_of_parallelism może to być:
1
Pomija generowanie planu równoległego.
>1
Ogranicza maksymalną liczbę procesorów używanych w równoległej operacji statystyki do określonej liczby lub mniejszej na podstawie bieżącego obciążenia systemu.
0
(ustawienie domyślne)
Używa rzeczywistej liczby procesorów lub mniej na podstawie bieżącego obciążenia systemu.
update_stats_stream_option
Zidentyfikowane tylko do celów informacyjnych. Nieobsługiwane. Zgodność w przyszłości nie jest gwarantowana.
AUTO_DROP = { ON | WYŁ. }
Dotyczy: SQL Server 2022 (16.x) i nowsze wersje
Obecnie, jeśli statystyki są tworzone przez narzędzie innej firmy w bazie danych klienta, te obiekty statystyczne mogą blokować lub zakłócać zmiany schematu, których klient może potrzebować.
(Począwszy od programu SQL Server 2022 (16.x))| Ta funkcja umożliwia tworzenie obiektów statystyk w trybie tak, aby zmiana schematu nie blokowana przez statystyki, ale zamiast tego statystyki zostaną usunięte. W ten sposób statystyki automatycznego upuszczania zachowują się jak automatycznie utworzone statystyki.
Nuta
Próba ustawienia lub odłączania właściwości Auto_Drop dla automatycznie utworzonych statystyk może spowodować powstanie błędów — automatycznie utworzone statystyki zawsze używają automatycznego upuszczania. Niektóre kopie zapasowe, po przywróceniu, mogą mieć tę właściwość niepoprawnie ustawioną do czasu następnego zaktualizowania obiektu statystyk (ręcznie lub automatycznie). Jednak automatycznie utworzone statystyki zawsze zachowują się jak statystyki automatycznego porzucania.
Uwagi
Kiedy zaktualizować STATYSTYKI
Aby uzyskać więcej informacji o tym, kiedy należy używać UPDATE STATISTICS
, zobacz Kiedy zaktualizować statystyki.
Ograniczenia
- Aktualizowanie statystyk nie jest obsługiwane w tabelach zewnętrznych. Aby zaktualizować statystyki dotyczące tabeli zewnętrznej, upuść i ponownie utwórz statystyki.
- Aktualizowanie statystyk utworzonych automatycznie w każdym indeksie magazynu kolumn nie jest obsługiwane. Próba uzyskania tego wyniku powoduje błąd 35337:
UPDATE STATISTICS failed because statistics cannot be updated on a columnstore index. UPDATE STATISTICS is valid only when used with the STATS_STREAM option.
- Opcja
MAXDOP
nie jest zgodna z opcjamiSTATS_STREAM
,ROWCOUNT
iPAGECOUNT
. - Opcja
MAXDOP
jest ograniczona przez ustawienie grupy obciążeń Zarządca zasobówMAX_DOP
, jeśli jest używane.
Aktualizowanie wszystkich statystyk przy użyciu sp_updatestats
Aby uzyskać informacje o sposobie aktualizowania statystyk dla wszystkich tabel zdefiniowanych przez użytkownika i wewnętrznych w bazie danych, zobacz procedurę składowaną sp_updatestats. Na przykład następujące polecenie wywołuje sp_updatestats
, aby zaktualizować wszystkie statystyki bazy danych.
EXECUTE sp_updatestats;
Automatyczne zarządzanie indeksami i statystykami
Użyj rozwiązań, takich jak Adaptive Index Defrag, aby automatycznie zarządzać defragmentacją indeksu i aktualizacjami statystyk dla jednej lub więcej baz danych. Ta procedura automatycznie wybiera, czy należy ponownie skompilować lub zreorganizować indeks zgodnie z poziomem fragmentacji, między innymi parametrami, oraz zaktualizować statystyki z progiem liniowym.
Określanie ostatniej aktualizacji statystyk
Aby określić, kiedy statystyki zostały ostatnio zaktualizowane, użyj funkcji STATS_DATE.
PDW / Azure Synapse Analytics
Następująca składnia nie jest obsługiwana przez system platformy analizy (PDW) / Azure Synapse Analytics:
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;
Uprawnienia
Wymaga ALTER
uprawnienia do tabeli lub widoku.
Przykłady
A. Aktualizowanie wszystkich statystyk w tabeli
Poniższy przykład aktualizuje wszystkie statystyki dotyczące tabeli SalesOrderDetail
.
USE AdventureWorks2022;
GO
UPDATE STATISTICS Sales.SalesOrderDetail;
GO
B. Aktualizowanie statystyk indeksu
Poniższy przykład aktualizuje statystyki indeksu AK_SalesOrderDetail_rowguid
tabeli SalesOrderDetail
.
USE AdventureWorks2022;
GO
UPDATE STATISTICS Sales.SalesOrderDetail (AK_SalesOrderDetail_rowguid);
GO
C. Aktualizowanie statystyk przy użyciu próbkowania 50 procent
Poniższy przykład tworzy i aktualizuje statystyki dla kolumn Name
i ProductNumber
w tabeli Product
.
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. Aktualizowanie statystyk przy użyciu FUNKCJI FULLSCAN i NORECOMPUTE
Poniższy przykład aktualizuje statystyki Products
w tabeli Product
, wymusza pełne skanowanie wszystkich wierszy w tabeli Product
i wyłącza automatyczne statystyki dla statystyk Products
.
USE AdventureWorks2022;
GO
UPDATE STATISTICS Production.Product (Products)
WITH FULLSCAN, NORECOMPUTE;
GO
Przykłady: Azure Synapse Analytics and Analytics Platform System (PDW)
E. Aktualizowanie statystyk dotyczących tabeli
Poniższy przykład aktualizuje statystyki CustomerStats1
dotyczące tabeli Customer
.
UPDATE STATISTICS Customer (CustomerStats1);
F. Aktualizowanie statystyk przy użyciu pełnego skanowania
Poniższy przykład aktualizuje statystyki CustomerStats1
na podstawie skanowania wszystkich wierszy w tabeli Customer
.
UPDATE STATISTICS Customer (CustomerStats1) WITH FULLSCAN;
G. Aktualizowanie wszystkich statystyk w tabeli
Poniższy przykład aktualizuje wszystkie statystyki dotyczące tabeli Customer
.
UPDATE STATISTICS Customer;
H. Używanie funkcji CREATE STATISTICS z AUTO_DROP
Aby użyć statystyk automatycznego upuszczania, wystarczy dodać następujący kod do klauzuli "WITH" statystyki tworzenia lub aktualizowania.
UPDATE STATISTICS Customer (CustomerStats1) WITH AUTO_DROP = ON;
Powiązana zawartość
- statystyki
- statystyki w usłudze Microsoft Fabric
- 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)