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


UPDATE STATISTICS (Transact-SQL)

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseFelügyelt Azure SQL-példányAzure Synapse AnalyticsAnalytics platformrendszer (PDW)SQL Analytics-végpont a Microsoft FabricWarehouse-ban a Microsoft FabricSQL-adatbázisban a Microsoft Fabric

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.

Jegyzet

További információ a Microsoft Fabric statisztikáiról: Statistics in Fabric data warehousing.

Transact-SQL szintaxis konvenciói

Szintaxis

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
        }
    ]
[;]

Jegyzet

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

Érvek

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.

Jegyzet

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.

Jegyzet

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.

Figyelmeztetés

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ásai című témakört.

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ó: A kiszolgáló konfigurációs beállításainak maximális fokának konfigurálása. 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.

Jegyzet

Az automatikusan létrehozott statisztikák Auto_Drop tulajdonságának 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 automatikusan létrehozott statisztikák azonban mindig úgy viselkednek, mint az automatikus csökkenési statisztikák.

Megjegyzések

Mikor kell FRISSÍTENI A STATISZTIKÁKAT?

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

Korlátozások

  • 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 cannot 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;

Engedélyek

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

Példák

Egy. 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;