Megosztás a következőn keresztül:


STATISZTIKÁK FRISSÍTÉSE (Transact-SQL)

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseFelügyelt Azure SQL-példányAzure Synapse AnalyticsElemzési platformrendszer (PDW)SQL Analytics-végpont a Microsoft FabricbenRaktár a Microsoft FabricbenSQL-adatbázis a Microsoft Fabricben

Frissíti a lekérdezésoptimalizálási táblákon vagy indexelt nézetben statisztikákat. Alapértelmezés szerint a lekérdezésoptimalizáló már frissíti a statisztikákat a lekérdezésterv továbbfejlesztéséhez; bizonyos esetekben javíthatja a lekérdezés teljesítményét UPDATE STATISTICS vagy a tárolt eljárás sp_updatestats használatával, hogy az alapértelmezett frissítéseknél gyakrabban frissítse a statisztikákat.

A statisztikák frissítése biztosítja, hogy a lekérdezések up-todátumstatisztikákkal legyenek lefordítva. A statisztikák bármilyen folyamaton keresztüli frissítése automatikusan újrafordíthatja a lekérdezési terveket. Javasoljuk, hogy ne frissítse túl gyakran a statisztikákat, mert teljesítménybeli különbség van a lekérdezéstervek javítása és a lekérdezések újrafordításához szükséges idő között. Az adott kompromisszumok az alkalmazástól függenek. UPDATE STATISTICS a tempdb használatával rendezheti a sorok mintáját a statisztikai adatok létrehozásához.

Note

A Microsoft Fabric statisztikáiról további információt a Fabric Data Warehouse statisztikái című témakörben talál.

Transact-SQL szintaxis konvenciói

Syntax

Az SQL Server és az Azure SQL Database szintaxisa.

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 ]

Az Azure Synapse Analytics és a párhuzamos adattárház szintaxisa.

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

A Microsoft Fabric szintaxisa.

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

Note

Ezt a szintaxist az Azure Synapse Analytics kiszolgáló nélküli SQL-készlete nem támogatja.

Arguments

table_or_indexed_view_name

A statisztikai objektumot tartalmazó tábla vagy indexelt nézet neve.

index_or_statistics_name vagy statistics_name | index_name vagy statistics_name

A frissíteni kívánt statisztikák statisztikáinak vagy nevének frissítéséhez használt index neve. Ha nincs megadva index_or_statistics_name vagy statistics_name, a lekérdezésoptimalizáló frissíti a tábla vagy indexelt nézet összes statisztikáját. Ide tartoznak az utasítással létrehozott statisztikák, a CREATE STATISTICS bekapcsolt állapotban AUTO_CREATE_STATISTICS létrehozott egyoszlopos statisztikák és az indexekhez létrehozott statisztikák.

További információ: AUTO_CREATE_STATISTICSALTER DATABASE SET options. Egy tábla vagy nézet összes indexének megtekintéséhez használhatja a sp_helpindex.

FULLSCAN

Statisztikai adatok kiszámítása a tábla vagy indexelt nézetben lévő összes sor vizsgálatával. FULLSCAN és SAMPLE 100 PERCENT ugyanazokkal az eredményekkel rendelkezik. FULLSCAN nem használható a SAMPLE beállítással.

MINTA szám { PERCENT | SOROK }

Megadja, hogy a lekérdezésoptimalizáló hány sort használjon a statisztikai adatok frissítésekhez a táblában vagy indexelt nézetben. A PERCENTszám értéke 0 és 100 között lehet, a ROWSszám pedig 0 és a sorok teljes száma között lehet. Előfordulhat, hogy a lekérdezésoptimalizáló-minták tényleges százaléka vagy száma nem felel meg a megadott százalékos értéknek vagy számnak. A lekérdezésoptimalizáló például egy adatoldal összes sorát megvizsgálja.

SAMPLE olyan speciális esetekben hasznos, amikor a lekérdezési terv az alapértelmezett mintavételezés alapján nem optimális. A legtöbb esetben nem szükséges megadni SAMPLE , mert a lekérdezésoptimalizáló mintavételezést használ, és alapértelmezés szerint meghatározza a statisztikailag jelentős mintaméretet a kiváló minőségű lekérdezési tervek létrehozásához.

Note

Az SQL Server 2016 -ban (13.x) a 130-es adatbázis-kompatibilitási szint használatakor a statisztikai adatok mintavételezése párhuzamosan történik a statisztikák gyűjtésének teljesítményének javítása érdekében. A lekérdezésoptimalizáló párhuzamos mintastatisztikákat fog használni, ha egy tábla mérete túllép egy bizonyos küszöbértéket. Az SQL Server 2017-től (14.x) kezdve az adatbázis-kompatibilitási szinttől függetlenül a viselkedést a rendszer egy soros vizsgálatra módosította, hogy elkerülje a túlzott LATCH várakozással kapcsolatos esetleges teljesítményproblémákat. A lekérdezési terv többi része a statisztikák frissítése során a párhuzamos végrehajtást is fenntartja, ha minősített.

SAMPLE nem használható a FULLSCAN beállítással. Ha nincs megadva SAMPLE , FULLSCAN a lekérdezésoptimalizáló mintavételezett adatokat használ, és alapértelmezés szerint kiszámítja a minta méretét.

Javasoljuk, hogy ne adjon meg vagy 0 PERCENT0 ROWS. Ha 0 PERCENT meg van adva vagy 0 ROWS meg van adva, a statisztikai objektum frissül, de nem tartalmaz statisztikai adatokat.

A legtöbb számítási feladathoz nincs szükség teljes vizsgálatra, és az alapértelmezett mintavételezés megfelelő. Bizonyos számítási feladatok azonban, amelyek érzékenyek a széles körű adateloszlásokra, nagyobb mintaméretet, vagy akár teljes vizsgálatot igényelhetnek. Bár a becslések pontosabbá válhatnak egy teljes vizsgálattal, mint a mintául vett vizsgálat, az összetett tervek nem feltétlenül hasznosak.

További információ: A statisztikaiösszetevői és fogalmai.

RESAMPLE

Frissítse az egyes statisztikákat a legutóbbi mintaarány használatával.

A használat RESAMPLE teljes táblázatos vizsgálathoz vezethet. Az indexek statisztikái például teljes táblázatos vizsgálatot használnak a mintaarányuk alapján. Ha nincs megadva a mintabeállítások (SAMPLE, , FULLSCAN) egyike sem, RESAMPLEa lekérdezésoptimalizáló mintát vesz az adatokból, és alapértelmezés szerint kiszámítja a mintaméretet.

A Microsoft Fabric RESAMPLE Warehouse-ban nem támogatott.

PERSIST_SAMPLE_PERCENT = { ON | KI }

A következőkre vonatkozik: SQL Server 2016 (13.x) Service Pack 1 CU4, SQL Server 2017 (14.x) Service Pack 1 vagy SQL Server 2019 (15.x) és újabb verziók, Azure SQL Database, Felügyelt Azure SQL-példány

Amikor ONa statisztikák megtartják a mintavételezési százalékot az olyan későbbi frissítéseknél, amelyek nem határoznak meg explicit módon mintavételezési százalékot. Amikor OFFa statisztikai mintavételezési százalék alaphelyzetbe áll az alapértelmezett mintavételezésre a későbbi frissítésekben, amelyek nem határoznak meg explicit módon mintavételezési százalékot. Az alapértelmezett érték a OFF.

DBCC-SHOW_STATISTICS és sys.dm_db_stats_properties a kijelölt statisztika megmaradó minta százalékos értékét teszi elérhetővé.

Ha AUTO_UPDATE_STATISTICS végrehajtásra kerül, akkor a megmaradó mintavételi százalékot használja, ha van, vagy ha nem, akkor használja az alapértelmezett mintavételi százalékot. RESAMPLE ez a beállítás nem befolyásolja a viselkedést.

Ha a táblázat csonkolva van, a csonkolt halomra vagy a B-fára (HoBT) épülő összes statisztika visszaáll az alapértelmezett mintavételezési százalékra. Hasonlóképpen, ha a statisztikák sorok nélkül frissülnek egy objektumon, akkor az visszaállítja az alapértelmezett mintavételezési százalékot, még akkor is, ha PERSIST_SAMPLE_PERCENT korábban konfigurálva volt.

Note

Az SQL Serverben egy olyan index újraépítésekor, amely korábban frissítette PERSIST_SAMPLE_PERCENTa statisztikákat, a rendszer visszaállítja az alapértelmezett mintaszázalékot. Az SQL Server 2016 (13.x) SP2 CU17, az SQL Server 2017 (14.x) CU26 és az SQL Server 2019 (15.x) CU10 rendszertől kezdve a megmaradó minta százalékos aránya még az index újraépítésekor is megmarad.

PARTÍCIÓKON ( { <partition_number> | <tartomány> } [ , ... n ] ) ]

: SQL Server 2014 (12.x) és újabb verziók

Kényszeríti a záradékban ON PARTITIONS meghatározott partíciókat lefedő levélszintű statisztikák újrafordítását, majd egyesítését a globális statisztikák létrehozásához. WITH RESAMPLE azért van szükség, mert a különböző mintasebességgel létrehozott partícióstatisztikák nem egyesíthetők egymással.

ALL | OSZLOPOK | INDEX

Frissítse az indexekhez létrehozott összes meglévő statisztikát, egy vagy több oszlopban létrehozott statisztikákat vagy statisztikákat. Ha egyik beállítás sincs megadva, az utasítás frissíti a UPDATE STATISTICS tábla vagy az indexelt nézet összes statisztikáját.

NORECOMPUTE

Tiltsa le az automatikus statisztikafrissítési beállítást AUTO_UPDATE_STATISTICSa megadott statisztikákhoz. Ha ez a beállítás meg van adva, a lekérdezésoptimalizáló végrehajtja ezt a statisztikai frissítést, és letiltja a jövőbeli frissítéseket.

A beállítás viselkedésének AUTO_UPDATE_STATISTICS újbóli engedélyezéséhez futtassa UPDATE STATISTICS újra a beállítást vagy a NORECOMPUTE futtatás sp_autostatsnélkül.

Warning

Ezzel a beállítással optimálisnál rosszabb lekérdezési terveket hozhat létre. Javasoljuk, hogy ezt a lehetőséget takarékosan, majd csak egy minősített rendszergazda használja.

A beállítással kapcsolatos további információkért lásd az AUTO_STATISTICS_UPDATEALTER DATABASE SET beállításait.

NÖVEKMÉNYES = { BE | KI }

: SQL Server 2014 (12.x) és újabb verziók

Amikor ONa rendszer a partícióstatisztikák alapján hozza létre újra a statisztikákat. Amikor OFFa statisztikai fa el lesz ejtve, és az SQL Server újra kiszámítja a statisztikákat. Az alapértelmezett érték a OFF.

Ha a partíciónkénti statisztikák nem támogatottak, hiba jön létre. A növekményes statisztikák nem támogatottak a következő statisztikai típusokhoz:

  • Olyan indexekkel létrehozott statisztikák, amelyek nincsenek partícióhoz igazítva az alaptáblához.
  • Az Always On olvasható másodlagos adatbázisokon létrehozott statisztikák.
  • Írásvédett adatbázisokon létrehozott statisztikák.
  • Szűrt indexeken létrehozott statisztikák.
  • Nézeteken létrehozott statisztikák.
  • Belső táblákon létrehozott statisztikák.
  • Térbeli indexekkel vagy XML-indexekkel létrehozott statisztikák.

MAXDOP = max_degree_of_parallelism

A következővonatkozik: SQL Server (SQL Server 2016 (13.x) SP2 és SQL Server 2017 (14.x) CU3).

Felülbírálja a max degree of parallelism statisztikai művelet időtartamára vonatkozó konfigurációs beállítást. További információ: kiszolgálókonfiguráció: a párhuzamosság maximális foka. A párhuzamos terv végrehajtásához használt processzorok számának korlátozására használható MAXDOP . A maximális érték 64 processzor.

max_degree_of_parallelism lehet:

1

Letiltja a párhuzamos tervgenerálást.

>1

A párhuzamos statisztikai műveletekben használt processzorok maximális számát az aktuális rendszerterheléstől függően a megadott számra vagy annál kevesebbre korlátozza.

0 (alapértelmezett)

A processzorok tényleges számát használja, vagy kevesebbet az aktuális rendszerterhelés alapján.

update_stats_stream_option

Csak tájékoztatási célokra van meghatározva. Nem támogatott. A jövőbeli kompatibilitás nem garantált.

AUTO_DROP = { ON | KI }

A következővonatkozik: SQL Server 2022 (16.x) és újabb verziók

Jelenleg, ha a statisztikákat egy harmadik féltől származó eszköz hozza létre egy ügyféladatbázison, ezek a statisztikai objektumok blokkolhatják vagy zavarhatják az ügyfél által kívánt sémamódosításokat.

(Az SQL Server 2022-től kezdve (16.x)| Ez a funkció olyan módban teszi lehetővé a statisztikai objektumok létrehozását, hogy a sémamódosítás ne a statisztikák blokkolva legyenek, hanem a statisztikák el lesznek dobva. Ily módon az automatikus elvetési statisztikák úgy viselkednek, mint az automatikusan létrehozott statisztikák.

Note

Az automatikusan létrehozott statisztikák tulajdonságának AUTO_DROP beállítása vagy törlése hibákat eredményezhet. Az automatikusan létrehozott statisztikák mindig automatikus elvetést használnak. Egyes biztonsági másolatok visszaállításakor előfordulhat, hogy ez a tulajdonság helytelenül van beállítva a statisztikai objektum következő frissítéséig (manuálisan vagy automatikusan). Az Azure SQL Database, az Azure SQL Managed Instance és az SQL Server 2022 (16.x) és újabb verziókban azonban az automatikusan létrehozott statisztikák mindig úgy viselkednek, mintha a AUTO_DROP be lett volna állítva.

Remarks

Mikor kell FRISSÍTENI A STATISZTIKÁKAT?

További információ a UPDATE STATISTICShasználatáról: Mikor frissítse a statisztikákat.

Limitations

  • A statisztikák frissítése külső táblákban nem támogatott. Egy külső tábla statisztikáinak frissítéséhez dobja le és hozza létre újra a statisztikákat.

  • Az oszlopcentrikus indexeken automatikusan létrehozott statisztikák frissítése nem támogatott. Ennek megkísérlése a 35337-ös hibát eredményezi: UPDATE STATISTICS failed because statistics can't be updated on a columnstore index. UPDATE STATISTICS is valid only when used with the STATS_STREAM option. További információ: Indexstatisztika.

    Az egyes oszlopok statisztikáinak vagy oszlopkészleteinek frissítése támogatott.

  • A MAXDOP beállítás nem kompatibilis STATS_STREAM, ROWCOUNT és PAGECOUNT beállításokkal.

  • A MAXDOP beállítást a Resource Governor számítási feladatcsoport MAX_DOP beállítás korlátozza, ha használja.

Az összes statisztika frissítése sp_updatestats

Az adatbázis összes felhasználó által definiált és belső táblájának statisztikáinak frissítéséről a tárolt sp_updatestatscímű témakörben olvashat. Az alábbi parancs például meghívja sp_updatestats az adatbázis összes statisztikájának frissítésére.

EXECUTE sp_updatestats;

Automatikus index- és statisztikakezelés

A adaptív indextöredezettség-mentesítési segítségével automatikusan kezelheti egy vagy több adatbázis indextöredezettség- és statisztikai frissítéseit. Ez az eljárás automatikusan kiválasztja, hogy újraépít vagy átrendez egy indexet a töredezettségi szintnek megfelelően, többek között más paraméterekkel, és lineáris küszöbértékkel frissíti a statisztikákat.

Az utolsó statisztikai frissítés meghatározása

A statisztikák legutóbbi frissítésének időpontjának meghatározásához használja a STATS_DATE függvényt.

PDW / Azure Synapse Analytics

Az Elemzési platformrendszer (PDW) és az Azure Synapse Analytics nem támogatja a következő szintaxist:

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;

Permissions

A táblához vagy nézethez ALTER engedély szükséges.

Examples

A. Tábla összes statisztikáinak frissítése

Az alábbi példa frissíti az SalesOrderDetail tábla összes statisztikáit.

USE AdventureWorks2022;
GO

UPDATE STATISTICS Sales.SalesOrderDetail;
GO

B. Index statisztikáinak frissítése

Az alábbi példa frissíti a AK_SalesOrderDetail_rowguid tábla SalesOrderDetail indexének statisztikáit.

USE AdventureWorks2022;
GO

UPDATE STATISTICS Sales.SalesOrderDetail (AK_SalesOrderDetail_rowguid);
GO

C. Statisztikák frissítése 50 százalékos mintavételezéssel

Az alábbi példa létrehozza és frissíti a Name tábla ProductNumber és Product oszlopainak statisztikáit.

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. Statisztikák frissítése a FULLSCAN és a NORECOMPUTE használatával

Az alábbi példa frissíti a Products tábla Product statisztikáit, a Product tábla összes sorának teljes vizsgálatát kényszeríti ki, és kikapcsolja a Products statisztikák automatikus statisztikáit.

USE AdventureWorks2022;
GO

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

Példák: Azure Synapse Analytics and Analytics Platform System (PDW)

E. Táblázat statisztikáinak frissítése

Az alábbi példa frissíti a CustomerStats1 tábla Customer statisztikáit.

UPDATE STATISTICS Customer (CustomerStats1);

F. Statisztikák frissítése teljes vizsgálattal

Az alábbi példa frissíti a CustomerStats1 statisztikát a Customer tábla összes sorának vizsgálata alapján.

UPDATE STATISTICS Customer (CustomerStats1) WITH FULLSCAN;

G. Tábla összes statisztikáinak frissítése

Az alábbi példa frissíti az Customer tábla összes statisztikáit.

UPDATE STATISTICS Customer;

H. A CREATE STATISTICS használata AUTO_DROP

Az automatikus csepegtetési statisztikák használatához egyszerűen adja hozzá a következőket a statisztikák létrehozásához vagy frissítéséhez használt "WITH" záradékhoz.

UPDATE STATISTICS Customer (CustomerStats1) WITH AUTO_DROP = ON;