Dela via


Skapa och uppdatera tabellstatistik i en dedikerad SQL-pool

Den här artikeln innehåller rekommendationer och exempel för att skapa och uppdatera frågeoptimeringsstatistik för tabeller i en dedikerad SQL-pool.

Varför använda statistik

Ju mer dedikerad SQL-pool vet om dina data, desto snabbare kan den köra frågor mot dem. När du har läst in data i en dedikerad SQL-pool är insamling av statistik om dina data en av de viktigaste sakerna du kan göra för att optimera dina frågor.

Frågeoptimeraren för den dedikerade SQL-poolen är en kostnadsbaserad optimerare. Den jämför kostnaden för olika frågeplaner och väljer sedan planen med den lägsta kostnaden. I de flesta fall väljer den den plan som körs snabbast.

Optimeraren väljer till exempel en viss plan om den uppskattar att det datum då frågan filtreras på returnerar en rad. Om optimeraren uppskattar att det valda datumet returnerar en miljon rader väljer den en annan plan.

Automatiskt skapande av statistik

När databasalternativet AUTO_CREATE_STATISTICS är aktiverat analyserar den dedikerade SQL-poolen inkommande användarfrågor efter statistik som saknas.

Om statistik saknas skapar frågeoptimeraren statistik för enskilda kolumner i frågepredikatet eller kopplingsvillkoret för att förbättra kardinalitetsuppskattningarna för frågeplanen.

Kommentar

Automatisk skapande av statistik aktiveras för närvarande som standard.

Du kan kontrollera om din dedikerade SQL-pool har AUTO_CREATE_STATISTICS konfigurerats genom att köra följande T-SQL-kommando:

SELECT name, is_auto_create_stats_on
FROM sys.databases

Om din dedikerade SQL-pool inte har AUTO_CREATE_STATISTICS konfigurerats rekommenderar vi att du aktiverar den här egenskapen genom att köra följande kommando. Ersätt <your-datawarehouse-name> med namnet på din dedikerade SQL-pool.

ALTER DATABASE <your-datawarehouse-name>
SET AUTO_CREATE_STATISTICS ON

Dessa instruktioner utlöser automatisk skapande av statistik:

  • SELECT
  • INSERT... SELECT
  • CREATE TABLE AS SELECT (CTAS)
  • UPDATE
  • DELETE
  • EXPLAIN när det finns en koppling eller förekomsten av ett predikat identifieras

Kommentar

Automatisk skapande av statistik utförs inte på tillfälliga eller externa tabeller.

Automatisk skapande av statistik görs synkront så du kan få något sämre frågeprestanda om dina kolumner saknar statistik. Tiden för att skapa statistik för en enskild kolumn beror på tabellens storlek.

För att undvika mätbar prestandaförsämring bör du se till att statistik har skapats först genom att köra benchmark-arbetsbelastningen innan du profilerar systemet.

Kommentar

Skapande av statistik loggas i sys.dm_pdw_exec_requests under en annan användarkontext.

När automatisk statistik skapas får de formuläret: _WA_Sys_<8 digit column id in Hex>_<8 digit table id in Hex>. Du kan visa statistik som redan har skapats genom att köra kommandot DBCC SHOW_STATISTICS :

DBCC SHOW_STATISTICS (<table_name>, <target>)

table_name är namnet på tabellen som innehåller den statistik som ska visas. Den här tabellen kan inte vara en extern tabell. Målet är namnet på målindexet, statistiken eller kolumnen som statistikinformationen ska visas för.

Uppdatera statistik

En metod är att uppdatera statistik om datumkolumner varje dag när nya datum läggs till. Varje gång nya rader läses in i den dedikerade SQL-poolen läggs nya inläsningsdatum eller transaktionsdatum till. Dessa tillägg ändrar datafördelningen och gör statistiken inaktuell.

Statistik för en lands-/regionkolumn i en kundtabell kanske aldrig behöver uppdateras eftersom fördelningen av värden i allmänhet inte ändras. Förutsatt att distributionen är konstant mellan kunder kommer det inte att ändra datafördelningen genom att lägga till nya rader i tabellvarianten.

Men om din dedikerade SQL-pool bara innehåller ett land/en region och du tar in data från ett nytt land/en ny region, vilket resulterar i att data från flera länder/regioner lagras, måste du uppdatera statistiken i kolumnen land/region.

Följande är rekommendationer för uppdatering av statistik:

Statistikattribut Rekommendation
Frekvens för statistikuppdateringar Konservativ: Dagligen
efter inläsning eller transformering av dina data
Sampling Mindre än 1 miljard rader använder standardsampling (20 procent).
Med mer än 1 miljard rader använder du sampling på två procent.

En av de första frågorna att ställa när du felsöker en fråga är "Är statistiken uppdaterad?"

Den här frågan kan inte besvaras efter dataåldern. Ett uppdaterat statistikobjekt kan vara gammalt om det inte har skett någon väsentlig ändring av underliggande data. När antalet rader har ändrats avsevärt, eller om det sker en väsentlig ändring i fördelningen av värden för en kolumn, är det dags att uppdatera statistiken.

Det finns ingen dynamisk hanteringsvy för att avgöra om data i tabellen har ändrats sedan statistiken senast uppdaterades. Följande två frågor kan hjälpa dig att avgöra om din statistik är inaktuell.

  • Fråga 1: Hitta skillnaden mellan radantalet från statistiken (stats_row_count) och det faktiska radantalet (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
    
    
  • Fråga 2: Hitta din statistiks ålder genom att kontrollera den senaste gången statistiken uppdaterades i varje tabell.

    Kommentar

    Om det sker en väsentlig ändring i fördelningen av värden för en kolumn bör du uppdatera statistik oavsett när de uppdaterades senast.

    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;
    

Datumkolumner i en dedikerad SQL-pool behöver till exempel vanligtvis frekventa statistikuppdateringar. Varje gång nya rader läses in i den dedikerade SQL-poolen läggs nya inläsningsdatum eller transaktionsdatum till. Dessa tillägg ändrar datafördelningen och gör statistiken inaktuell.

Omvänt kanske statistik om en könskolumn i en kundtabell aldrig behöver uppdateras. Förutsatt att distributionen är konstant mellan kunder kommer det inte att ändra datafördelningen genom att lägga till nya rader i tabellvarianten.

Om din dedikerade SQL-pool bara innehåller ett kön och ett nytt krav resulterar i flera kön måste du uppdatera statistiken för könskolumnen.

Mer information finns i allmän vägledning för statistik.

Implementera statistikhantering

Det är ofta en bra idé att utöka datainläsningsprocessen för att säkerställa att statistiken uppdateras i slutet av belastningen för att undvika eller minimera blockering eller resurskonkurration mellan samtidiga frågor.

Datainläsningen är när tabeller oftast ändrar storlek eller fördelning av värden. Datainläsning är en logisk plats för att implementera vissa hanteringsprocesser.

Följande vägledande principer finns för uppdatering av din statistik:

  • Kontrollera att varje inläst tabell har minst ett statistikobjekt uppdaterat. Detta uppdaterar tabellstorleken (radantal och antal sidor) som en del av statistikuppdateringen.
  • Fokusera på kolumner som deltar i JOIN-, GROUP BY-, ORDER BY- och DISTINCT-satser.
  • Överväg att uppdatera stigande nyckelkolumner , till exempel transaktionsdatum oftare, eftersom dessa värden inte ingår i statistik histogrammet.
  • Överväg att uppdatera statiska distributionskolumner mindre ofta.
  • Kom ihåg att varje statistikobjekt uppdateras i ordningsföljd. Att bara implementera UPDATE STATISTICS <TABLE_NAME> är inte alltid idealiskt, särskilt inte för breda tabeller med många statistikobjekt.

Mer information finns i Kardinalitetsuppskattning.

Exempel: Skapa statistik

De här exemplen visar hur du använder olika alternativ för att skapa statistik. Vilka alternativ du använder för varje kolumn beror på egenskaperna för dina data och hur kolumnen används i frågor.

Skapa statistik med en kolumn med standardalternativ

Om du vill skapa statistik för en kolumn anger du ett namn för statistikobjektet och namnet på kolumnen.

Den här syntaxen använder alla standardalternativ. Som standard samplas 20 procent av tabellen när du skapar statistik.

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

Till exempel:

CREATE STATISTICS col1_stats ON dbo.table1 (col1);

Skapa statistik med en kolumn genom att undersöka varje rad

Standardsamplingsfrekvensen på 20 procent räcker för de flesta situationer. Du kan dock justera samplingsfrekvensen.

Om du vill prova den fullständiga tabellen använder du den här syntaxen:

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

Till exempel:

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

Skapa statistik med en kolumn genom att ange exempelstorleken

Du kan också ange exempelstorleken som procent:

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

Skapa statistik med en kolumn på bara några av raderna

Du kan också skapa statistik på en del av raderna i tabellen. Detta kallas för en filtrerad statistik.

Du kan till exempel använda filtrerad statistik när du planerar att köra frågor mot en specifik partition i en stor partitionerad tabell. Genom att bara skapa statistik för partitionsvärdena förbättras statistikens noggrannhet, vilket förbättrar frågeprestandan.

Det här exemplet skapar statistik över ett värdeintervall. Värdena kan enkelt definieras för att matcha intervallet med värden i en partition.

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

Kommentar

För att frågeoptimeraren ska kunna överväga att använda filtrerad statistik när den väljer den distribuerade frågeplanen måste frågan passa in i definitionen av statistikobjektet. I föregående exempel måste frågans WHERE-sats ange col1-värden mellan 2000101 och 20001231.

Skapa statistik med en kolumn med alla alternativ

Du kan också kombinera alternativen tillsammans. I följande exempel skapas ett filtrerat statistikobjekt med en anpassad exempelstorlek:

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

Fullständig referens finns i SKAPA STATISTIK.

Skapa statistik för flera kolumner

Om du vill skapa ett statistikobjekt med flera kolumner använder du föregående exempel, men anger fler kolumner.

Kommentar

Histogrammet, som används för att uppskatta antalet rader i frågeresultatet, är endast tillgängligt för den första kolumnen som anges i statistikobjektdefinitionen.

I det här exemplet är histogrammet på product_category. Statistik för korskolumner beräknas på product_category och product_sub_category:

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

Eftersom det finns en korrelation mellan product_category och product_sub_categorykan ett statistikobjekt med flera kolumner vara användbart om dessa kolumner används samtidigt.

Skapa statistik för alla kolumner i en tabell

Ett sätt att skapa statistik är att utfärda CREATE STATISTICS kommandon när du har skapat tabellen:

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);

Använd en lagrad procedur för att skapa statistik för alla kolumner i en SQL-pool

Den dedikerade SQL-poolen har ingen system lagrad procedur som motsvarar sp_create_stats i SQL Server. Den här lagrade proceduren skapar ett enkolumnsstatistikobjekt för varje kolumn i en SQL-pool som inte redan har statistik.

I följande exempel visas hur du kommer igång med din SQL-pooldesign. Du kan anpassa den efter dina behov.

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;

Om du vill skapa statistik för alla kolumner i tabellen med standardvärdena kör du den lagrade proceduren.

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

Om du vill skapa statistik för alla kolumner i tabellen med hjälp av en fullscan anropar du den här proceduren.

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

Om du vill skapa exempelstatistik för alla kolumner i tabellen anger du 3 och exempelprocenten. Den här proceduren använder en exempelfrekvens på 20 procent.

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

Exempel: Uppdatera statistik

Om du vill uppdatera statistik kan du:

  • Uppdatera ett statistikobjekt. Ange namnet på det statistikobjekt som du vill uppdatera.
  • Uppdatera alla statistikobjekt i en tabell. Ange namnet på tabellen i stället för ett specifikt statistikobjekt.

Uppdatera ett specifikt statistikobjekt

Använd följande syntax för att uppdatera ett specifikt statistikobjekt:

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

Till exempel:

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

Genom att uppdatera specifika statistikobjekt kan du minimera den tid och de resurser som krävs för att hantera statistik. För att göra det krävs en tanke att välja de bästa statistikobjekten att uppdatera.

Uppdatera all statistik i en tabell

En enkel metod för att uppdatera alla statistikobjekt i en tabell är:

UPDATE STATISTICS [schema_name].[table_name];

Till exempel:

UPDATE STATISTICS dbo.table1;

Instruktionen UPDATE STATISTICS är lätt att använda. Kom bara ihåg att den uppdaterar all statistik i tabellen och därför kan utföra mer arbete än vad som är nödvändigt. Om prestanda inte är ett problem är detta det enklaste och mest fullständiga sättet att garantera att statistiken är uppdaterad.

Kommentar

När du uppdaterar all statistik i en tabell genomsöker den dedikerade SQL-poolen tabellen för varje statistikobjekt. Om tabellen är stor och har många kolumner och många statistik kan det vara mer effektivt att uppdatera individuell statistik baserat på behov.

En implementering av en UPDATE STATISTICS procedur finns i Temporära tabeller. Implementeringsmetoden skiljer sig något från föregående CREATE STATISTICS procedur, men resultatet är detsamma.

Fullständig syntax finns i Uppdatera statistik.

Metadata för statistik

Det finns flera systemvyer och funktioner som du kan använda för att hitta information om statistik. Du kan till exempel se om ett statistikobjekt kan vara inaktuellt med hjälp av funktionen stats-date för att se när statistik senast skapades eller uppdaterades.

Katalogvyer för statistik

Dessa systemvyer innehåller information om statistik:

Katalogvy beskrivning
sys.columns En rad för varje kolumn
sys.objects En rad för varje objekt i databasen
sys.schemas En rad för varje schema i databasen
sys.stats En rad för varje statistikobjekt
sys.stats_columns En rad för varje kolumn i statistikobjektet. länkar tillbaka till sys.columns
sys.tables En rad för varje tabell (inkluderar externa tabeller)
sys.table_types En rad för varje datatyp

Systemfunktioner för statistik

Dessa systemfunktioner är användbara för att arbeta med statistik:

Systemfunktion beskrivning
STATS_DATE Datum då statistikobjektet senast uppdaterades
DBCC-SHOW_STATISTICS Sammanfattningsnivå och detaljerad information om fördelningen av värden enligt statistikobjektet

Kombinera statistikkolumner och funktioner i en vy

Den här vyn innehåller kolumner som relaterar till statistik och resultat från STATS_DATE() funktionen tillsammans.

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() exempel

DBCC SHOW_STATISTICS() visar data som finns i ett statistikobjekt. Dessa data kommer i tre delar:

  • Header
  • Densitetsvektor
  • Histogram

Huvudmetadata om statistiken. Histogrammet visar fördelningen av värden i den första nyckelkolumnen i statistikobjektet. Densitetsvektorn mäter korrelation mellan kolumner.

Kommentar

Dedikerad SQL-pool beräknar kardinalitetsuppskattningar med någon av data i statistikobjektet.

Visa rubrik, densitet och histogram

Det här enkla exemplet visar alla tre delarna i ett statistikobjekt:

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

Till exempel:

DBCC SHOW_STATISTICS (dbo.table1, stats_col1);

Visa en eller flera delar av DBCC SHOW_STATISTICS()

Om du bara är intresserad av att visa specifika delar använder WITH du satsen och anger vilka delar du vill se:

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

Till exempel:

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

DBCC-SHOW_STATISTICS() skillnader

DBCC SHOW_STATISTICS() är striktare implementerad i en dedikerad SQL-pool jämfört med SQL Server:

  • Odokumenterade funktioner stöds inte.
  • Det går inte att använda Stats_stream.
  • Det går inte att koppla resultat för specifika delmängder av statistikdata. Exempel: STAT_HEADER JOIN DENSITY_VECTOR
  • NO_INFOMSGS kan inte ställas in för undertryckning av meddelanden.
  • Hakparenteser runt statistiknamn kan inte användas.
  • Det går inte att använda kolumnnamn för att identifiera statistikobjekt.
  • Anpassat fel 2767 stöds inte.

Övervaka din dedikerade SQL-poolarbetsbelastning i Azure Synapse Analytics med dmv:er