Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
platí pro:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
koncový bod SQL Analytics ve službě Microsoft Fabric
Warehouse v Microsoft Fabric
databáze SQL v Microsoft Fabric
Aktualizuje statistiky optimalizace dotazů v tabulce nebo indexovém zobrazení. Optimalizátor dotazů už ve výchozím nastavení aktualizuje statistiky podle potřeby, aby zlepšil plán dotazu; v některých případech můžete zlepšit výkon dotazů pomocí UPDATE STATISTICS
nebo uložené procedury sp_updatestats k aktualizaci statistik častěji než výchozí aktualizace.
Aktualizace statistik zajišťuje, že se dotazy kompilují pomocí up-tostatistiky -date. Aktualizace statistik prostřednictvím jakéhokoli procesu může způsobit automatické překompilování plánů dotazů. Nedoporučujeme aktualizovat statistiky příliš často, protože mezi vylepšováním plánů dotazů a časem potřebným k opětovnému kompilaci dotazů existuje kompromis mezi výkonem. Konkrétní kompromisy závisí na vaší aplikaci.
UPDATE STATISTICS
můžete použít tempdb
k seřazení vzorku řádků pro vytváření statistik.
Poznámka
Další informace o statistikách v Microsoft Fabric najdete v tématu Statistiky v datových skladech Fabric.
Syntax
Syntaxe pro SQL Server a 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 ]
Syntaxe pro Azure Synapse Analytics a paralelní datový sklad
UPDATE STATISTICS [ schema_name . ] table_name
[ ( { statistics_name | index_name } ) ]
[ WITH
{
FULLSCAN
| SAMPLE number PERCENT
| RESAMPLE
}
]
[;]
Syntaxe pro Microsoft Fabric.
UPDATE STATISTICS [ schema_name . ] table_name
[ ( { statistics_name } ) ]
[ WITH
{
FULLSCAN
| SAMPLE number PERCENT
}
]
[;]
Poznámka
Tato syntaxe není podporována bezserverovým fondem SQL ve službě Azure Synapse Analytics.
Argumenty
table_or_indexed_view_name
Název tabulky nebo indexovaného zobrazení, které obsahuje objekt statistiky.
index_or_statistics_name nebo statistics_name | index_name nebo statistics_name
Název indexu pro aktualizaci statistiky nebo název statistiky, která se má aktualizovat. Pokud není zadaný index_or_statistics_name nebo statistics_name, optimalizátor dotazů aktualizuje všechny statistiky pro tabulku nebo indexované zobrazení. To zahrnuje statistiky vytvořené pomocí CREATE STATISTICS
příkazu, statistiky s jedním sloupcem vytvořené v případě, kdy AUTO_CREATE_STATISTICS
jsou zapnuté, a statistiky vytvořené pro indexy.
Další informace o AUTO_CREATE_STATISTICS
nástroji ALTER DATABASE SET Naleznete v tématu Možnosti ALTER DATABASE SET. Pokud chcete zobrazit všechny indexy pro tabulku nebo zobrazení, můžete použít sp_helpindex.
FULLSCAN
Výpočet statistiky prohledáváním všech řádků v tabulce nebo indexovaného zobrazení
FULLSCAN
a SAMPLE 100 PERCENT
mají stejné výsledky.
FULLSCAN
nelze s možností SAMPLE
použít.
VZOREK číslo { PERCENT | ŘÁDKY }
Určuje přibližné procento nebo počet řádků v tabulce nebo indexované zobrazení pro optimalizátor dotazů, které se mají použít při aktualizaci statistik. Pro PERCENT
, číslo může být od 0 do 100 a pro ROWS
, číslo může být od 0 do celkového počtu řádků. Skutečné procento nebo počet řádků, které vzorky optimalizátoru dotazů nemusí odpovídat zadanému procentu nebo číslu. Optimalizátor dotazů například prohledá všechny řádky na datové stránce.
SAMPLE
je užitečná ve zvláštních případech, kdy plán dotazu na základě výchozího vzorkování není optimální. Ve většině situací není nutné zadávat SAMPLE
, protože optimalizátor dotazů používá vzorkování a ve výchozím nastavení určuje statisticky významnou velikost vzorku, jak je potřeba k vytvoření vysoce kvalitních plánů dotazů.
Poznámka
V SQL Serveru 2016 (13.x) při použití úrovně kompatibility databáze 130 se vzorkování dat k sestavení statistik provádí paralelně, aby se zlepšil výkon shromažďování statistik. Optimalizátor dotazů použije paralelní ukázkové statistiky, kdykoli velikost tabulky překročí určitou prahovou hodnotu. Od VERZE SQL Server 2017 (14.x) se chování bez ohledu na úroveň kompatibility databáze změnilo zpět na použití sériové kontroly, aby se zabránilo potenciálním problémům s výkonem při nadměrném LATCH
čekání. Zbývající část plánu dotazu při aktualizaci statistik zachová paralelní provádění, pokud je kvalifikovaná.
SAMPLE
nelze s možností FULLSCAN
použít.
SAMPLE
Pokud ani FULLSCAN
nezadáte, optimalizátor dotazů použije vzorkovaná data a ve výchozím nastavení vypočítá velikost vzorku.
Doporučujeme zadat 0 PERCENT
nebo 0 ROWS
. Pokud 0 PERCENT
je objekt 0 ROWS
statistiky nebo je zadán, aktualizuje se, ale neobsahuje data statistiky.
U většiny úloh se nevyžaduje úplná kontrola a výchozí vzorkování je adekvátní. Některé úlohy, které jsou citlivé na široce proměnlivé distribuce dat, ale můžou vyžadovat větší velikost vzorku nebo dokonce úplnou kontrolu. I když odhady můžou být přesnější s úplnou kontrolou než vzorek kontroly, složité plány nemusí výrazně těžit.
Další informace naleznete v tématu Součásti a koncepty statistiky.
PŘEVZORKOVAT
Aktualizujte každou statistiku pomocí nejnovější vzorkovací frekvence.
Použití RESAMPLE
může vést ke kontrole celé tabulky. Například statistika pro indexy používá úplnou tabulku vyhledávání vzorkovací frekvence. Pokud nezadáte žádnou z možností ukázky (SAMPLE
, FULLSCAN
, RESAMPLE
), optimalizátor dotazů ve výchozím nastavení vzorkuje data a vypočítá velikost vzorku.
Ve službě Warehouse v Microsoft Fabric RESAMPLE
se nepodporuje.
PERSIST_SAMPLE_PERCENT = { ON | VYPNUTO }
platí pro: SQL Server 2016 (13.x) Service Pack 1 CU4, SQL Server 2017 (14.x) Service Pack 1 nebo SQL Server 2019 (15.x) a novější verze, Azure SQL Database, Azure SQL Managed Instance
Pokud ON
statistika zachová nastavené procento vzorkování pro následné aktualizace, které explicitně nezadávají procento vzorkování. Pokud OFF
se procento vzorkování statistik obnoví na výchozí vzorkování v následných aktualizacích, které explicitně nezadávají procento vzorkování. Výchozí hodnota je OFF
.
dbCC SHOW_STATISTICS a sys.dm_db_stats_properties zveřejnit trvalou procentuální hodnotu vzorku pro vybranou statistiku.
Pokud AUTO_UPDATE_STATISTICS
se spustí, použije se trvalé procento vzorkování, pokud je k dispozici, nebo pokud ne, použijte výchozí procento vzorkování.
RESAMPLE
tato možnost nemá vliv na chování.
Pokud je tabulka zkrácená, všechny statistiky založené na zkrácené haldě nebo B-tree (HoBT) se vrátí k použití výchozího procenta vzorkování. Podobně platí, že pokud jsou statistiky u objektu aktualizovány bez řádků, vrátí se k použití výchozího procenta vzorkování, i když PERSIST_SAMPLE_PERCENT
byla dříve nakonfigurována.
Poznámka
Při opětovném sestavení indexu, na kterém byly dříve aktualizovány PERSIST_SAMPLE_PERCENT
statistiky, se při opětovném sestavení indexu obnoví trvalé procento vzorku zpět do výchozího stavu. Počínaje SQL Serverem 2016 (13.x) SP2 CU17, SQL Serverem 2017 (14.x) CU26 a SQL Serverem 2019 (15.x) CU10 se trvalé procento vzorku uchovává i při opětovném sestavení indexu.
ON PARTITIONS ( { <partition_number> | <range> } [ , ... n ] ) ]
platí pro: SQL Server 2014 (12.x) a novější verze
Vynutí statistiky na úrovni listu, které pokrývají oddíly zadané v ON PARTITIONS
klauzuli, aby se přepočítávaly, a pak je sloučí, aby se sestavily globální statistiky.
WITH RESAMPLE
je povinný, protože statistiky oddílů vytvořené s různými vzorkovacími mírami se nedají sloučit.
ALL | SLOUPCE | INDEX
Aktualizujte všechny existující statistiky, statistiky vytvořené pro jeden nebo více sloupců nebo statistiky vytvořené pro indexy. Pokud není zadána žádná z možností, UPDATE STATISTICS
příkaz aktualizuje všechny statistiky v tabulce nebo indexovaném zobrazení.
NORECOMPUTE
Zakažte možnost AUTO_UPDATE_STATISTICS
automatické aktualizace statistiky pro zadanou statistiku. Pokud je tato možnost zadaná, optimalizátor dotazů dokončí tuto aktualizaci statistiky a zakáže budoucí aktualizace.
Chcete-li znovu povolit AUTO_UPDATE_STATISTICS
chování možnosti, spusťte UPDATE STATISTICS
znovu bez NORECOMPUTE
možnosti nebo spuštění sp_autostats
.
Varování
Pomocí této možnosti můžete vytvořit neoptimální plány dotazů. Tuto možnost doporučujeme používat střídmě a pak jenom kvalifikovaný správce systému.
Další informace o této AUTO_STATISTICS_UPDATE
možnosti naleznete v tématu ALTER DATABASE SET Options.
INCREMENTAL = { ON | VYPNUTO }
platí pro: SQL Server 2014 (12.x) a novější verze
Pokud ON
se statistiky znovu vytvoří podle statistik oddílů. Když OFF
se strom statistiky vyřadí a SQL Server znovu vypočítá statistiku. Výchozí hodnota je OFF
.
Pokud statistiky jednotlivých oddílů nejsou podporované, vygeneruje se chyba. Přírůstkové statistiky nejsou podporované pro následující typy statistik:
- Statistiky vytvořené s indexy, které nejsou v souladu se základní tabulkou
- Statistiky vytvořené v sekundárních databázích s možností čtení AlwaysOn
- Statistiky vytvořené pro databáze jen pro čtení
- Statistiky vytvořené pro filtrované indexy
- Statistiky vytvořené v zobrazeních
- Statistiky vytvořené v interních tabulkách
- Statistiky vytvořené pomocí prostorových indexů nebo indexů XML
MAXDOP = max_degree_of_parallelism
platí pro: SQL Server (počínaje SQL Serverem 2016 (13.x) SP2 a SQL Serverem 2017 (14.x) CU3).
max degree of parallelism
Přepíše možnost konfigurace po dobu trvání operace statistiky. Další informace najdete v tématu Konfigurace maximálního stupně paralelismu Možnosti konfigurace serveru. Slouží MAXDOP
k omezení počtu procesorů používaných při paralelním provádění plánu. Maximum je 64 procesorů.
max_degree_of_parallelism může být:
1
Potlačí generování paralelního plánu.
>1
Omezuje maximální počet procesorů používaných v paralelní operaci statistiky na zadané číslo nebo méně na základě aktuální systémové úlohy.
0
(výchozí)
Používá skutečný počet procesorů nebo méně na základě aktuální systémové úlohy.
update_stats_stream_option
Určeno pouze pro informační účely. Nepodporuje se. Budoucí kompatibilita není zaručena.
AUTO_DROP = { ON | VYPNUTO }
platí pro: SQL Server 2022 (16.x) a novější verze
V současné době platí, že pokud jsou statistiky vytvořené nástrojem třetí strany v databázi zákazníka, mohou tyto objekty statistiky blokovat nebo narušit změny schématu, které zákazník může chtít.
(Počínaje SQL Serverem 2022 (16.x)| Tato funkce umožňuje vytváření objektů statistik v režimu tak, aby změna schématu statistiky neblokovala, ale místo toho se statistiky zahodí. Tímto způsobem se statistiky automatického odstraňování chovají jako automaticky vytvořené statistiky.
Poznámka
Při pokusu o nastavení nebo zrušení vlastnosti Auto_Drop u automaticky vytvořených statistik může dojít k chybám – automaticky vytvořené statistiky vždy používají automatické odstraňování. Některé zálohy při obnovení můžou mít tuto vlastnost nastavenou nesprávně, dokud se příště neaktualizuje objekt statistiky (ručně nebo automaticky). Automatické vytvořené statistiky se ale vždy chovají jako statistiky automatického poklesu.
Poznámky
Kdy AKTUALIZOVAT STATISTIKY
Další informace o tom, kdy použít UPDATE STATISTICS
, naleznete v tématu Kdy aktualizovat statistiky.
Omezení
Aktualizace statistik není u externích tabulek podporovaná. Pokud chcete aktualizovat statistiky v externí tabulce, odstraňte a znovu vytvořte statistiku.
Aktualizace statistik vytvořených automaticky v indexu columnstore se nepodporuje. Při pokusu o tuto chybu dojde k chybě 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.
Další informace najdete v tématu Statistiky indexu.Podporuje se aktualizace statistik jednotlivých sloupců nebo sad sloupců indexu columnstore.
Možnost
MAXDOP
není kompatibilní s možnostmiSTATS_STREAM
,ROWCOUNT
aPAGECOUNT
.Možnost
MAXDOP
je omezena skupinou úloh Správce prostředkůMAX_DOP
nastavení, pokud se používá.
Aktualizace všech statistik pomocí sp_updatestats
Informace o tom, jak aktualizovat statistiky pro všechny uživatelem definované a interní tabulky v databázi, naleznete v uložené procedury sp_updatestats. Například následující příkaz volá sp_updatestats
aktualizovat všechny statistiky databáze.
EXECUTE sp_updatestats;
Automatická správa indexů a statistik
Pomocí řešení, jako je Adaptivní index Defrag, můžete automaticky spravovat defragmentaci indexu a aktualizace statistik pro jednu nebo více databází. Tento postup automaticky zvolí, zda se má index znovu sestavit nebo znovu uspořádat podle úrovně fragmentace, mimo jiné parametry, a aktualizovat statistiky lineární prahovou hodnotou.
Určení poslední aktualizace statistiky
Pokud chcete zjistit, kdy byly statistiky naposledy aktualizovány, použijte funkci STATS_DATE.
PDW / Azure Synapse Analytics
Analytics Platform System (PDW) / Azure Synapse Analytics nepodporuje následující syntaxi:
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;
Dovolení
Vyžaduje oprávnění ALTER
v tabulce nebo zobrazení.
Příklady
A. Aktualizace všech statistik v tabulce
Následující příklad aktualizuje všechny statistiky v tabulce SalesOrderDetail
.
USE AdventureWorks2022;
GO
UPDATE STATISTICS Sales.SalesOrderDetail;
GO
B. Aktualizace statistik indexu
Následující příklad aktualizuje statistiky pro AK_SalesOrderDetail_rowguid
index tabulky SalesOrderDetail
.
USE AdventureWorks2022;
GO
UPDATE STATISTICS Sales.SalesOrderDetail (AK_SalesOrderDetail_rowguid);
GO
C. Aktualizace statistik pomocí 50% vzorkování
Následující příklad vytvoří a potom aktualizuje statistiky pro sloupce Name
a ProductNumber
v tabulce 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. Aktualizace statistik pomocí FUNKCE FULLSCAN a NORECOMPUTE
Následující příklad aktualizuje Products
statistiky v tabulce Product
, vynutí úplnou kontrolu všech řádků v tabulce Product
a vypne automatické statistiky pro Products
statistiky.
USE AdventureWorks2022;
GO
UPDATE STATISTICS Production.Product (Products)
WITH FULLSCAN, NORECOMPUTE;
GO
Příklady: Azure Synapse Analytics a Analytický platformový systém (PDW)
E. Aktualizace statistiky v tabulce
Následující příklad aktualizuje statistiky CustomerStats1
tabulky Customer
.
UPDATE STATISTICS Customer (CustomerStats1);
F. Aktualizace statistik pomocí úplné kontroly
Následující příklad aktualizuje CustomerStats1
statistiky na základě kontroly všech řádků v tabulce Customer
.
UPDATE STATISTICS Customer (CustomerStats1) WITH FULLSCAN;
G. Aktualizace všech statistik v tabulce
Následující příklad aktualizuje všechny statistiky v tabulce Customer
.
UPDATE STATISTICS Customer;
H. Použití funkce CREATE STATISTICS s AUTO_DROP
Pokud chcete použít statistiku automatického odstraňování, stačí do klauzule WITH statistiky vytvořit nebo aktualizovat následující.
UPDATE STATISTICS Customer (CustomerStats1) WITH AUTO_DROP = ON;
Související obsah
- statistiky
- statistiky v Microsoft Fabric
- ALTER DATABASE (Transact-SQL)
- sys.dm_db_stats_properties (Transact-SQL)
- sys.dm_db_stats_histogram (Transact-SQL)
-
CREATE STATISTICS (Transact-SQL) -
DB SHOW_STATISTICS CC (Transact-SQL) - DROP STATISTICS (Transact-SQL)
-
sp_autostats (Transact-SQL) - sp_updatestats (Transact-SQL)
-
STATS_DATE (Transact-SQL)