AKTUALIZOVAT STATISTIKY (Transact-SQL)
platí pro:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)koncový bod SQL Analytics ve službě Microsoft FabricWarehouse v Microsoft Fabricdatabá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 naleznete v tématu Statistika v Microsoft Fabric.
Syntax
-- Syntax for SQL Server and 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 ]
-- Syntax for Azure Synapse Analytics and Parallel Data Warehouse
UPDATE STATISTICS [ schema_name . ] table_name
[ ( { statistics_name | index_name } ) ]
[ WITH
{
FULLSCAN
| SAMPLE number PERCENT
| RESAMPLE
}
]
[;]
-- Syntax for 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
Je název tabulky nebo indexovaného zobrazení, které obsahuje objekt statistiky.
index_or_statistics_name nebo statistics_name | index_name nebo statistics_name
Je 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í příkazu CREATE STATISTICS, statistiky s jedním sloupcem vytvořené při AUTO_CREATE_STATISTICS jsou zapnuté a statistiky vytvořené pro indexy.
Další informace o AUTO_CREATE_STATISTICS naleznete v tématu ALTER DATABASE SET Options. 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 použít s možností SAMPLE.
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. V případě procent může číslo být od 0 do 100 a u řádků může číslo 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.
UKÁZKA je užitečná ve speciální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é zadat 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. Počínaje SQL Serverem 2017 (14.x) bez ohledu na úroveň kompatibility databáze se chování 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 čekání LATCH. Zbývající část plánu dotazu při aktualizaci statistik zachová paralelní provádění, pokud je kvalifikovaná.
UKÁZKu nelze použít s možností FULLSCAN. Pokud není zadán parametr SAMPLE ani FULLSCAN, použije optimalizátor dotazů vzorkovaná data a ve výchozím nastavení vypočítá velikost vzorku.
Doporučujeme zadat 0 PROCENT nebo 0 ŘÁDKŮ. Při zadání 0 PROCENT nebo ŘÁDKŮ se objekt statistiky aktualizuje, 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 zvýšenou velikost vzorku nebo dokonce úplnou kontrolu. I když se odhady můžou stát přesnějším při úplné kontrole 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í funkce RESAMPLE může vést ke kontrole celé tabulky. Například statistika pro indexy používá úplnou tabulku vyhledávání vzorkovací frekvence. Pokud není zadána žádná 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 se resAMPLE 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
Když ZAPNUTO, statistika zachová nastavené procento vzorkování pro následné aktualizace, které explicitně nezadávají procento vzorkování. Když VYPNUTO, procento vzorkování statistik se resetuje na výchozí vzorkování v následných aktualizacích, které explicitně nezadávají procento vzorkování. Výchozí hodnota je VYPNUTO.
dbCC SHOW_STATISTICS a sys.dm_db_stats_properties zveřejnit trvalou procentuální hodnotu vzorku pro vybranou statistiku.
Pokud se AUTO_UPDATE_STATISTICS spustí, použije trvalé procento vzorkování, pokud je k dispozici, nebo pokud ne, použijte výchozí procento vzorkování. Tato možnost nemá vliv na chování FUNKCE RESAMPLE.
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í.
Poznámka
Při opětovném sestavení indexu, u kterého byly dříve aktualizovány statistiky pomocí PERSIST_SAMPLE_PERCENT, se trvalé procento vzorku obnoví zpět na výchozí hodnotu. 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> | <rozsah> } [; ... n] ) ]
platí pro: SQL Server 2014 (12.x) a novější
Vynutí, aby statistiky na úrovni listu pokrývající oddíly zadané v klauzuli ON PARTITIONS byly přepočítané a pak sloučeny pro sestavení globální statistiky. FUNKCE RESAMPLE se vyžaduje, protože statistiky oddílů vytvořené s různými vzorkovacími rychlostmi 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í, příkaz UPDATE STATISTICS aktualizuje všechny statistiky v tabulce nebo indexovaném zobrazení.
NORECOMPUTE
Zakažte možnost automatické aktualizace statistiky AUTO_UPDATE_STATISTICS 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 chování AUTO_UPDATE_STATISTICS možnosti, spusťte funkci UPDATE STATISTICS znovu bez možnosti NORECOMPUTE nebo spusťte 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 možnosti AUTO_STATISTICS_UPDATE naleznete v tématu ALTER DATABASE SET Options.
INCREMENTAL = { ON | VYPNUTO }
platí pro: SQL Server 2014 (12.x) a novější
Při ZAPNUTOse statistiky znovu vytvoří podle statistik oddílů. Když VYPNUTO, strom statistiky se zahodí a SQL Server znovu vypočítá statistiku. Výchozí hodnota je VYPNUTO.
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).
Po dobu trvání statistické operace přepíše maximální stupeň paralelismu možnost konfigurace. Další informace najdete v tématu Konfigurace maximálního stupně paralelismu Možnosti konfigurace serveru. Pomocí funkce MAXDOP omezte počet 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žitých v paralelní statistické operaci 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ší.
V současné době, 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 se můžou objevit chyby – automatické vytváření statistik vždy používá 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.
- 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.
EXEC sp_updatestats;
Automatická správa indexů a statistik
Využijte řešení, jako je Adaptivní index defrag, k automatické správě defragmentace indexů a aktualizací statistik pro jednu nebo více databází. Tento postup automaticky zvolí, zda se má index znovu sestavit nebo změnit uspořádání 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)