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


A dedikált SQL-készlet táblázatstatisztikái a Azure Synapse Analyticsben

Ebben a cikkben javaslatokat és példákat talál a dedikált SQL-készlet tábláinak lekérdezésoptimalizálási statisztikáinak létrehozására és frissítésére.

Miért érdemes statisztikákat használni?

Minél több dedikált SQL-készlet tud az adatokról, annál gyorsabban hajthat végre lekérdezéseket. Miután betöltötte az adatokat a dedikált SQL-készletbe, az adatok statisztikáinak gyűjtése az egyik legfontosabb lehetőség a lekérdezések optimalizálásához.

A dedikált SQL-készlet lekérdezésoptimalizálója egy költségalapú optimalizáló. Összehasonlítja a különböző lekérdezéstervek költségeit, majd kiválasztja a legalacsonyabb költségű csomagot. A legtöbb esetben azt a tervet választja ki, amely a leggyorsabb lesz.

Ha például az optimalizáló becslést ad arról, hogy a lekérdezés szűrésének dátuma egy sort ad vissza, akkor egy tervet választ ki. Ha becslést ad arra, hogy a kiválasztott dátum 1 millió sort ad vissza, akkor egy másik tervet ad vissza.

Statisztika automatikus létrehozása

Ha az adatbázis-AUTO_CREATE_STATISTICS beállítás be van kapcsolva, a dedikált SQL-készlet elemzi a bejövő felhasználói lekérdezéseket a hiányzó statisztikák alapján.

Ha hiányoznak statisztikák, a lekérdezésoptimalizáló statisztikákat hoz létre a lekérdezési predikátum vagy illesztés egyes oszlopairól a lekérdezésterv számosságbecsléseinek javítása érdekében.

Megjegyzés

A statisztikák automatikus létrehozása jelenleg alapértelmezés szerint be van kapcsolva.

A következő parancs futtatásával ellenőrizheti, hogy a dedikált SQL-készlet AUTO_CREATE_STATISTICS van-e konfigurálva:

SELECT name, is_auto_create_stats_on
FROM sys.databases

Ha a dedikált SQL-készlethez nincs konfigurálva AUTO_CREATE_STATISTICS, javasoljuk, hogy engedélyezze ezt a tulajdonságot a következő parancs futtatásával:

ALTER DATABASE <yourdatawarehousename>
SET AUTO_CREATE_STATISTICS ON

Ezek az utasítások a statisztikák automatikus létrehozását váltják ki:

  • SELECT
  • INSERT-SELECT
  • CTAS
  • UPDATE
  • DELETE
  • MAGYARÁZAT illesztés vagy predikátum jelenlétének észlelésekor

Megjegyzés

A statisztikák automatikus létrehozása nem ideiglenes vagy külső táblákon jön létre.

A statisztikák automatikus létrehozása szinkron módon történik, így kismértékben csökkenthet a lekérdezési teljesítmény, ha az oszlopokból hiányoznak statisztikák. Az egyetlen oszlop statisztikáinak létrehozásához szükséges idő a tábla méretétől függ.

A mérhető teljesítménycsökkenés elkerülése érdekében győződjön meg arról, hogy a statisztikák először a teljesítményteszt számítási feladatainak végrehajtásával lettek létrehozva a rendszer profilkészítése előtt.

Megjegyzés

A statisztikák létrehozása sys.dm_pdw_exec_requests egy másik felhasználói környezetben lesz naplózva.

Az automatikus statisztikák létrehozásakor a következő formában jelennek meg: WA_Sys<8 számjegyű oszlopazonosítót a Hex>_<8 számjegyű táblázatazonosítóban a Hexben>. A dbCC SHOW_STATISTICS parancs futtatásával megtekintheti a már létrehozott statisztikákat:

DBCC SHOW_STATISTICS (<table_name>, <target>)

A table_name a megjelenítendő statisztikákat tartalmazó tábla neve. Ez a tábla nem lehet külső tábla. A cél annak a célindexnek, statisztikai adatnak vagy oszlopnak a neve, amelynek a statisztikai adatait meg szeretné jeleníteni.

Statisztika frissítése

Az egyik ajánlott eljárás a dátumoszlopok statisztikáinak napi frissítése az új dátumok hozzáadásakor. Minden alkalommal, amikor új sorok töltődnek be a dedikált SQL-készletbe, a rendszer új betöltési dátumokat vagy tranzakciódátumokat ad hozzá. Ezek a kiegészítések megváltoztatják az adatelosztást, és elavultá teszik a statisztikákat.

Előfordulhat, hogy egy ügyféltábla ország/régió oszlopának statisztikáit nem kell frissíteni, mivel az értékek eloszlása általában nem változik. Ha az eloszlás állandó az ügyfelek között, az új sorok táblaváltozathoz való hozzáadása nem változtatja meg az adateloszlást.

Ha azonban a dedikált SQL-készlet csak egy országot/régiót tartalmaz, és egy új országból/régióból hoz adatokat, ami több országból/régióból származó adatokat tárol, akkor frissítenie kell az ország/régió oszlop statisztikáit.

A statisztikák frissítésére vonatkozó javaslatok a következők:

Statistics attribútum Ajánlás
A statisztikák frissítéseinek gyakorisága Konzervatív: Naponta
az adatok betöltése vagy átalakítása után
Mintavételezés Kevesebb mint 1 milliárd sor, használja az alapértelmezett mintavételezést (20 százalék).
Több mint 1 milliárd sor esetén használjon két százalékos mintavételezést.

Az egyik első kérdés, amelyet fel kell tenni egy lekérdezés hibaelhárítása során: "Naprakészek-e a statisztikák?"

Ez a kérdés nem az adatok kora alapján megválaszolható kérdés. Egy naprakész statisztikai objektum régi lehet, ha nem történt lényeges változás a mögöttes adatokban. Ha a sorok száma jelentősen megváltozott, vagy egy oszlop értékeinek eloszlása lényegesen módosult, akkor ideje frissíteni a statisztikákat.

Nincs dinamikus felügyeleti nézet annak megállapításához, hogy a tábla adatai megváltoztak-e a statisztikák legutóbbi frissítése óta. Az alábbi két lekérdezés segíthet megállapítani, hogy a statisztikák elavultak-e.

1. lekérdezés: Megtudhatja, hogy mi a különbség a sorok száma között a statisztikákból (stats_row_count) és a tényleges sorok számából (actual_row_count).

select 
objIdsWithStats.[object_id], 
actualRowCounts.[schema], 
actualRowCounts.logical_table_name, 
statsRowCounts.stats_row_count, 
actualRowCounts.actual_row_count,
row_count_difference = CASE
    WHEN actualRowCounts.actual_row_count >= statsRowCounts.stats_row_count THEN actualRowCounts.actual_row_count - statsRowCounts.stats_row_count
    ELSE statsRowCounts.stats_row_count - actualRowCounts.actual_row_count
END,
percent_deviation_from_actual = CASE
    WHEN actualRowCounts.actual_row_count = 0 THEN statsRowCounts.stats_row_count
    WHEN statsRowCounts.stats_row_count = 0 THEN actualRowCounts.actual_row_count
    WHEN actualRowCounts.actual_row_count >= statsRowCounts.stats_row_count THEN CONVERT(NUMERIC(18, 0), CONVERT(NUMERIC(18, 2), (actualRowCounts.actual_row_count - statsRowCounts.stats_row_count)) / CONVERT(NUMERIC(18, 2), actualRowCounts.actual_row_count) * 100)
    ELSE CONVERT(NUMERIC(18, 0), CONVERT(NUMERIC(18, 2), (statsRowCounts.stats_row_count - actualRowCounts.actual_row_count)) / CONVERT(NUMERIC(18, 2), actualRowCounts.actual_row_count) * 100)
END
from
(
    select distinct object_id from sys.stats where stats_id > 1
) objIdsWithStats
left join
(
    select object_id, sum(rows) as stats_row_count from sys.partitions group by object_id
) statsRowCounts
on objIdsWithStats.object_id = statsRowCounts.object_id 
left join
(
    SELECT sm.name [schema] ,
        tb.name logical_table_name ,
        tb.object_id object_id ,
        SUM(rg.row_count) actual_row_count
    FROM sys.schemas sm
         INNER JOIN sys.tables tb ON sm.schema_id = tb.schema_id
         INNER JOIN sys.pdw_table_mappings mp ON tb.object_id = mp.object_id
         INNER JOIN sys.pdw_nodes_tables nt ON nt.name = mp.physical_name
         INNER JOIN sys.dm_pdw_nodes_db_partition_stats rg     ON rg.object_id = nt.object_id
            AND rg.pdw_node_id = nt.pdw_node_id
            AND rg.distribution_id = nt.distribution_id
    WHERE rg.index_id = 1
    GROUP BY sm.name, tb.name, tb.object_id
) actualRowCounts
on objIdsWithStats.object_id = actualRowCounts.object_id

2. lekérdezés: A statisztikák korának megtekintéséhez ellenőrizze, hogy mikor frissültek utoljára a statisztikák az egyes táblákon.

Megjegyzés

Ha egy oszlop értékeinek eloszlása lényegesen változik, akkor a legutóbbi frissítés időpontjától függetlenül frissítenie kell a statisztikákat.

SELECT
    sm.[name] AS [schema_name],
    tb.[name] AS [table_name],
    co.[name] AS [stats_column_name],
    st.[name] AS [stats_name],
    STATS_DATE(st.[object_id],st.[stats_id]) AS [stats_last_updated_date]
FROM
    sys.objects ob
    JOIN sys.stats st
        ON  ob.[object_id] = st.[object_id]
    JOIN sys.stats_columns sc
        ON  st.[stats_id] = sc.[stats_id]
        AND st.[object_id] = sc.[object_id]
    JOIN sys.columns co
        ON  sc.[column_id] = co.[column_id]
        AND sc.[object_id] = co.[object_id]
    JOIN sys.types  ty
        ON  co.[user_type_id] = ty.[user_type_id]
    JOIN sys.tables tb
        ON  co.[object_id] = tb.[object_id]
    JOIN sys.schemas sm
        ON  tb.[schema_id] = sm.[schema_id]
WHERE
    st.[user_created] = 1;

A dedikált SQL-készlet dátumoszlopaihoz például általában gyakori statisztikai frissítésekre van szükség. Minden alkalommal, amikor új sorok töltődnek be a dedikált SQL-készletbe, a rendszer új betöltési dátumokat vagy tranzakciódátumokat ad hozzá. Ezek a kiegészítések megváltoztatják az adatelosztást, és elavultá teszik a statisztikákat.

Ezzel szemben előfordulhat, hogy egy ügyféltábla nemi oszlopának statisztikáit nem kell frissíteni. Ha az eloszlás állandó az ügyfelek között, az új sorok táblaváltozathoz való hozzáadása nem változtatja meg az adateloszlást.

Ha a dedikált SQL-készlet csak egy nemet tartalmaz, és egy új követelmény több nemet eredményez, akkor frissítenie kell a nemek oszlopának statisztikáit.

További információkért tekintse meg a statisztika általános útmutatóit.

Statisztikakezelés megvalósítása

Gyakran érdemes kiterjeszteni az adatbetöltési folyamatot annak érdekében, hogy a terhelés végén a statisztikák frissüljenek, hogy elkerülje/minimalizálja az egyidejű lekérdezések közötti blokkolást vagy erőforrás-versengést.

Az adatbetöltés az, amikor a táblák leggyakrabban módosítják a méretüket és/vagy az értékek eloszlását. Az adatbetöltés egy logikai hely bizonyos felügyeleti folyamatok implementálásához.

A statisztikák frissítéséhez az alábbi irányelveket biztosítjuk:

  • Győződjön meg arról, hogy minden betöltött tábla legalább egy frissített statisztikai objektummal rendelkezik. Ez frissíti a táblázat méretét (sorszám és oldalszám) a statisztikai frissítés részeként.
  • A JOIN, GROUP BY, ORDER BY és DISTINCT záradékokban részt vevő oszlopokra összpontosíthat.
  • Érdemes lehet gyakrabban frissíteni a "növekvő kulcs" oszlopokat, például a tranzakciós dátumokat, mert ezek az értékek nem lesznek belefoglalva a statisztikai hisztogramba.
  • Fontolja meg a statikus terjesztési oszlopok ritkábban történő frissítését.
  • Ne feledje, hogy minden statisztikai objektum egymás után frissül. Az egyszerű implementálás UPDATE STATISTICS <TABLE_NAME> nem mindig ideális, különösen a sok statisztikai objektumot tartalmazó széles táblák esetében.

További információ: Számosságbecslés.

Példák: Statisztika létrehozása

Ezek a példák bemutatják, hogyan használhat különböző lehetőségeket a statisztikák létrehozásához. Az egyes oszlopokhoz használt beállítások az adatok jellemzőitől és az oszlop lekérdezésekben való használatának módjától függenek.

Egyoszlopos statisztika létrehozása alapértelmezett beállításokkal

Ha statisztikákat szeretne létrehozni egy oszlopon, adja meg a statistics objektum nevét és az oszlop nevét.

Ez a szintaxis az összes alapértelmezett beállítást használja. Alapértelmezés szerint a rendszer a tábla 20 százalékát mintavételezi statisztikák létrehozásakor.

CREATE STATISTICS [statistics_name] ON [schema_name].[table_name]([column_name]);

Például:

CREATE STATISTICS col1_stats ON dbo.table1 (col1);

Egyoszlopos statisztika létrehozása minden sor vizsgálatával

A legtöbb helyzetben elegendő az alapértelmezett 20 százalékos mintavételezési arány. A mintavételezési gyakoriságot azonban módosíthatja.

A teljes táblázat mintájának megtekintéséhez használja az alábbi szintaxist:

CREATE STATISTICS [statistics_name] ON [schema_name].[table_name]([column_name]) WITH FULLSCAN;

Például:

CREATE STATISTICS col1_stats ON dbo.table1 (col1) WITH FULLSCAN;

Egyoszlopos statisztika létrehozása a minta méretének megadásával

Másik lehetőségként százalékként is megadhatja a mintaméretet:

CREATE STATISTICS col1_stats ON dbo.table1 (col1) WITH SAMPLE = 50 PERCENT;

Egyoszlopos statisztika létrehozása csak néhány sorra

A táblázat sorainak egy részére vonatkozó statisztikákat is létrehozhat. Ezt szűrt statisztikáknak nevezzük.

Szűrt statisztikákat például akkor használhat, ha egy nagy particionált tábla adott partícióját szeretné lekérdezni. Ha csak a partícióértékekre hoz létre statisztikákat, a statisztikák pontossága javul, és ezáltal javul a lekérdezési teljesítmény.

Ez a példa egy értéktartomány statisztikáit hozza létre. Az értékek egyszerűen definiálhatók úgy, hogy megfeleljenek a partíciók értéktartományának.

CREATE STATISTICS stats_col1 ON table1(col1) WHERE col1 > '2000101' AND col1 < '20001231';

Megjegyzés

Ahhoz, hogy a lekérdezésoptimalizáló az elosztott lekérdezési terv kiválasztásakor megfontolja a szűrt statisztikák használatát, a lekérdezésnek el kell férnie a statisztikai objektum definíciójában. Az előző példában a lekérdezés WHERE záradékának col1 értéket kell megadnia 2000101 és 20001231 között.

Egyoszlopos statisztikák létrehozása az összes beállítással

A beállításokat kombinálhatja is. Az alábbi példa egy szűrt statisztikai objektumot hoz létre egyéni mintamérettel:

CREATE STATISTICS stats_col1 ON table1 (col1) WHERE col1 > '2000101' AND col1 < '20001231' WITH SAMPLE = 50 PERCENT;

A teljes hivatkozásért lásd: CREATE STATISTICS (STATISZTIKA LÉTREHOZÁSA).

Többoszlopos statisztikák létrehozása

Többoszlopos statisztikai objektum létrehozásához használja az előző példákat, de adjon meg további oszlopokat.

Megjegyzés

A lekérdezés eredményében szereplő sorok számának becslésére használt hisztogram csak a statisztikai objektumdefinícióban felsorolt első oszlophoz érhető el.

Ebben a példában a hisztogram product_category van. Az oszlopközi statisztikák kiszámítása product_category és product_sub_category történik:

CREATE STATISTICS stats_2cols ON table1 (product_category, product_sub_category) WHERE product_category > '2000101' AND product_category < '20001231' WITH SAMPLE = 50 PERCENT;

Mivel korreláció van a product_category és a product_sub_category között, egy többoszlopos statisztikai objektum akkor lehet hasznos, ha ezek az oszlopok egyszerre érhetők el.

Statisztika létrehozása egy tábla összes oszlopán

A statisztikák létrehozásának egyik módja a CREATE STATISTICS parancsok kiadása a tábla létrehozása után:

CREATE TABLE dbo.table1
(
   col1 int
,  col2 int
,  col3 int
)
WITH
  (
    CLUSTERED COLUMNSTORE INDEX
  )
;

CREATE STATISTICS stats_col1 on dbo.table1 (col1);
CREATE STATISTICS stats_col2 on dbo.table2 (col2);
CREATE STATISTICS stats_col3 on dbo.table3 (col3);

Tárolt eljárás használata egy SQL-készlet összes oszlopának statisztikáinak létrehozásához

A dedikált SQL-készlet nem rendelkezik a SQL Server sp_create_stats-nek megfelelő rendszer által tárolt eljárással. Ez a tárolt eljárás egyetlen oszlopstatisztikai objektumot hoz létre egy OLYAN SQL-készlet minden oszlopán, amely még nem rendelkezik statisztikákmal.

Az alábbi példa segít az SQL-készlet tervezésének első lépéseiben. Nyugodtan alkalmazkodjon az igényeihez.

CREATE PROCEDURE    [dbo].[prc_sqldw_create_stats]
(   @create_type    tinyint -- 1 default 2 Fullscan 3 Sample
,   @sample_pct     tinyint
)
AS

IF @create_type IS NULL
BEGIN
    SET @create_type = 1;
END;

IF @create_type NOT IN (1,2,3)
BEGIN
    THROW 151000,'Invalid value for @stats_type parameter. Valid range 1 (default), 2 (fullscan) or 3 (sample).',1;
END;

IF @sample_pct IS NULL
BEGIN;
    SET @sample_pct = 20;
END;

IF OBJECT_ID('tempdb..#stats_ddl') IS NOT NULL
BEGIN;
    DROP TABLE #stats_ddl;
END;

CREATE TABLE #stats_ddl
WITH    (   DISTRIBUTION    = HASH([seq_nmbr])
        ,   LOCATION        = USER_DB
        )
AS
WITH T
AS
(
SELECT      t.[name]                        AS [table_name]
,           s.[name]                        AS [table_schema_name]
,           c.[name]                        AS [column_name]
,           c.[column_id]                   AS [column_id]
,           t.[object_id]                   AS [object_id]
,           ROW_NUMBER()
            OVER(ORDER BY (SELECT NULL))    AS [seq_nmbr]
FROM        sys.[tables] t
JOIN        sys.[schemas] s         ON  t.[schema_id]       = s.[schema_id]
JOIN        sys.[columns] c         ON  t.[object_id]       = c.[object_id]
LEFT JOIN   sys.[stats_columns] l   ON  l.[object_id]       = c.[object_id]
                                    AND l.[column_id]       = c.[column_id]
                                    AND l.[stats_column_id] = 1
LEFT JOIN    sys.[external_tables] e    ON    e.[object_id]        = t.[object_id]
WHERE       l.[object_id] IS NULL
AND            e.[object_id] IS NULL -- not an external table
)
SELECT  [table_schema_name]
,       [table_name]
,       [column_name]
,       [column_id]
,       [object_id]
,       [seq_nmbr]
,       CASE @create_type
        WHEN 1
        THEN    CAST('CREATE STATISTICS '+QUOTENAME('stat_'+table_schema_name+ '_' + table_name + '_'+column_name)+' ON '+QUOTENAME(table_schema_name)+'.'+QUOTENAME(table_name)+'('+QUOTENAME(column_name)+')' AS VARCHAR(8000))
        WHEN 2
        THEN    CAST('CREATE STATISTICS '+QUOTENAME('stat_'+table_schema_name+ '_' + table_name + '_'+column_name)+' ON '+QUOTENAME(table_schema_name)+'.'+QUOTENAME(table_name)+'('+QUOTENAME(column_name)+') WITH FULLSCAN' AS VARCHAR(8000))
        WHEN 3
        THEN    CAST('CREATE STATISTICS '+QUOTENAME('stat_'+table_schema_name+ '_' + table_name + '_'+column_name)+' ON '+QUOTENAME(table_schema_name)+'.'+QUOTENAME(table_name)+'('+QUOTENAME(column_name)+') WITH SAMPLE '+CONVERT(varchar(4),@sample_pct)+' PERCENT' AS VARCHAR(8000))
        END AS create_stat_ddl
FROM T
;

DECLARE @i INT              = 1
,       @t INT              = (SELECT COUNT(*) FROM #stats_ddl)
,       @s NVARCHAR(4000)   = N''
;

WHILE @i <= @t
BEGIN
    SET @s=(SELECT create_stat_ddl FROM #stats_ddl WHERE seq_nmbr = @i);

    PRINT @s
    EXEC sp_executesql @s
    SET @i+=1;
END

DROP TABLE #stats_ddl;

Ha a tábla összes oszlopára vonatkozó statisztikákat szeretne létrehozni az alapértelmezett értékekkel, hajtsa végre a tárolt eljárást.

EXEC [dbo].[prc_sqldw_create_stats] 1, NULL;

Ha egy fullscan használatával szeretne statisztikákat létrehozni a tábla összes oszlopán, hívja meg ezt az eljárást.

EXEC [dbo].[prc_sqldw_create_stats] 2, NULL;

Ha mintastatisztikát szeretne létrehozni a tábla összes oszlopában, írja be a 3 értéket és a minta százalékos értékét. Ez az eljárás 20 százalékos mintaarányt használ.

EXEC [dbo].[prc_sqldw_create_stats] 3, 20;

Példák: Statisztika frissítése

A statisztikák frissítéséhez az alábbiakat teheti:

  • Frissítsen egy statisztikai objektumot. Adja meg a frissíteni kívánt statisztikai objektum nevét.
  • Frissítse a tábla összes statisztikai objektumát. Adja meg a tábla nevét egy adott statisztikai objektum helyett.

Egy adott statisztikai objektum frissítése

Az alábbi szintaxissal frissíthet egy adott statisztikai objektumot:

UPDATE STATISTICS [schema_name].[table_name]([stat_name]);

Például:

UPDATE STATISTICS [dbo].[table1] ([stats_col1]);

Adott statisztikai objektumok frissítésével minimalizálhatja a statisztikák kezeléséhez szükséges időt és erőforrásokat. Ehhez némi gondolkodásra van szükség a frissíteni kívánt legjobb statisztikai objektumok kiválasztásához.

Tábla statisztikáinak frissítése

A tábla összes statisztikai objektumának frissítésére szolgáló egyszerű módszer a következő:

UPDATE STATISTICS [schema_name].[table_name];

Például:

UPDATE STATISTICS dbo.table1;

Az UPDATE STATISTICS utasítás könnyen használható. Ne feledje, hogy frissíti a tábla összes statisztikáit, ezért a szükségesnél több munkát végezhet. Ha a teljesítmény nem probléma, ez a legegyszerűbb és legteljesebb módja annak, hogy a statisztikák naprakészek legyenek.

Megjegyzés

Egy tábla összes statisztikájának frissítésekor a dedikált SQL-készlet beolvassa a táblát az egyes statisztikai objektumokhoz. Ha a táblázat nagy méretű, és sok oszlopot és sok statisztikát tartalmaz, hatékonyabb lehet az egyes statisztikák igény szerinti frissítése.

Az eljárás végrehajtásához UPDATE STATISTICS lásd: Ideiglenes táblák. A megvalósítási módszer kissé eltér az előző CREATE STATISTICS eljárástól, de az eredmény ugyanaz.

A teljes szintaxisért lásd: Statisztika frissítése.

Statisztikai metaadatok

Számos rendszernézetet és függvényt használhat a statisztikákkal kapcsolatos információk megtalálásához. Például láthatja, hogy egy statisztikai objektum elavult-e. Ehhez használja a stats-date függvényt a statisztikák legutóbbi létrehozásának vagy frissítésének megtekintéséhez.

Katalógusnézetek statisztikákhoz

Ezek a rendszernézetek információkat nyújtanak a statisztikákról:

Katalógusnézet Description
sys.columns Minden oszlophoz egy sor tartozik.
sys.objects Az adatbázis minden objektumához egy sor tartozik.
sys.schemas Az adatbázis minden sémájának egy sora.
sys.stats Minden statisztikai objektumhoz egy sor tartozik.
sys.stats_columns A statisztikai objektum minden oszlopához egy sor tartozik. A sys.columns fájlra mutató hivatkozások.
sys.tables Minden táblához egy sor tartozik (külső táblákat is tartalmaz).
sys.table_types Minden adattípushoz egy sor tartozik.

Rendszerfüggvények statisztikai célokra

Ezek a rendszerfüggvények hasznosak a statisztikák kezeléséhez:

Rendszerfüggvény Description
STATS_DATE A statisztikai objektum utolsó frissítésének dátuma.
DBCC SHOW_STATISTICS Összegző szint és részletes információk az értékek eloszlásáról a statisztikai objektum által értelmezett módon.

Statisztikai oszlopok és függvények egyesítése egyetlen nézetben

Ez a nézet a STATS_DATE() függvény statisztikáihoz és eredményeihez kapcsolódó oszlopokat egyesíti.

CREATE VIEW dbo.vstats_columns
AS
SELECT
        sm.[name]                           AS [schema_name]
,       tb.[name]                           AS [table_name]
,       st.[name]                           AS [stats_name]
,       st.[filter_definition]              AS [stats_filter_definition]
,       st.[has_filter]                     AS [stats_is_filtered]
,       STATS_DATE(st.[object_id],st.[stats_id])
                                            AS [stats_last_updated_date]
,       co.[name]                           AS [stats_column_name]
,       ty.[name]                           AS [column_type]
,       co.[max_length]                     AS [column_max_length]
,       co.[precision]                      AS [column_precision]
,       co.[scale]                          AS [column_scale]
,       co.[is_nullable]                    AS [column_is_nullable]
,       co.[collation_name]                 AS [column_collation_name]
,       QUOTENAME(sm.[name])+'.'+QUOTENAME(tb.[name])
                                            AS two_part_name
,       QUOTENAME(DB_NAME())+'.'+QUOTENAME(sm.[name])+'.'+QUOTENAME(tb.[name])
                                            AS three_part_name
FROM    sys.objects                         AS ob
JOIN    sys.stats           AS st ON    ob.[object_id]      = st.[object_id]
JOIN    sys.stats_columns   AS sc ON    st.[stats_id]       = sc.[stats_id]
                            AND         st.[object_id]      = sc.[object_id]
JOIN    sys.columns         AS co ON    sc.[column_id]      = co.[column_id]
                            AND         sc.[object_id]      = co.[object_id]
JOIN    sys.types           AS ty ON    co.[user_type_id]   = ty.[user_type_id]
JOIN    sys.tables          AS tb ON  co.[object_id]        = tb.[object_id]
JOIN    sys.schemas         AS sm ON  tb.[schema_id]        = sm.[schema_id]
WHERE   1=1
AND     st.[user_created] = 1
;

DBCC SHOW_STATISTICS() példák

A DBCC SHOW_STATISTICS() a statisztikai objektumban tárolt adatokat jeleníti meg. Ezek az adatok három részből állnak:

  • Fejléc
  • Sűrűségvektor
  • Hisztogram

A statisztikák fejléc-metaadatai. A hisztogram megjeleníti az értékek eloszlását a statisztikai objektum első kulcsoszlopában. A sűrűségvektor oszlopközi korrelációt mér.

Megjegyzés

A dedikált SQL-készlet számosságbecsléseket számít ki a statisztikai objektum bármely adatával.

Fejléc, sűrűség és hisztogram megjelenítése

Ez az egyszerű példa egy statisztikai objektum mindhárom részét mutatja be:

DBCC SHOW_STATISTICS([<schema_name>.<table_name>],<stats_name>)

Például:

DBCC SHOW_STATISTICS (dbo.table1, stats_col1);

A DBCC egy vagy több részének megjelenítése SHOW_STATISTICS()

Ha csak bizonyos részek megtekintésére kíváncsi, használja a WITH záradékot, és adja meg, hogy mely részek jelenjenek meg:

DBCC SHOW_STATISTICS([<schema_name>.<table_name>],<stats_name>) WITH stat_header, histogram, density_vector

Például:

DBCC SHOW_STATISTICS (dbo.table1, stats_col1) WITH histogram, density_vector

DBCC SHOW_STATISTICS() eltérései

A DBCC SHOW_STATISTICS() szigorúbban implementálva van a dedikált SQL-készletben, mint SQL Server:

  • A nem dokumentált funkciók nem támogatottak.
  • Nem használható Stats_stream.
  • A statisztikai adatok adott részhalmazainak eredményei nem illeszthetők össze. Például STAT_HEADER JOIN DENSITY_VECTOR.
  • NO_INFOMSGS nem állítható be üzenetelnyomásra.
  • A statisztikai nevek körüli szögletes zárójelek nem használhatók.
  • Nem használhatók oszlopnevek statisztikai objektumok azonosítására.
  • A 2767-s egyéni hiba nem támogatott.

Következő lépések

A lekérdezési teljesítmény további javításáért lásd : A számítási feladat monitorozása