Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Tip
Microsoft Fabric Data Warehouse egy nagyvállalati szintű relációs raktár egy Data Lake-alaprendszeren, jövőre kész architektúrával, beépített AI-vel és új funkciókkal. Ha még nem ismerkedik adattárházzal, kezdje a Fabric Data Warehouse. A meglévő dedikált SQL-készlet számítási feladatai frissíthetők Fabric az adatelemzés, a valós idejű elemzés és a jelentéskészítés új képességeinek eléréséhez.
Ez a cikk javaslatokat és példákat tartalmaz a dedikált SQL-készletben lévő táblák 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 teendő 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ési tervek költségeit, majd a legalacsonyabb költséggel választja ki a csomagot. A legtöbb esetben a leggyorsabban végrehajtó tervet választja ki.
Az optimalizáló például kiválaszt egy bizonyos tervet, ha becslést ad arról, hogy a lekérdezés szűrésének dátuma egy sort ad vissza. Ha az optimalizáló becslése szerint a kiválasztott dátum egymillió sort ad vissza, egy másik tervet választ.
Statisztika automatikus létrehozása
Ha az adatbázis-beállítás AUTO_CREATE_STATISTICS be van kapcsolva, a dedikált SQL-készlet elemzi a hiányzó statisztikák bejövő felhasználói lekérdezéseit.
Ha a statisztikák hiányoznak, a lekérdezésoptimalizáló statisztikákat hoz létre a lekérdezési predikátum egyes oszlopaiban vagy összekapcsolási feltételében, hogy javítsa a lekérdezésterv számosságbecsléseit.
Feljegyzés
A statisztikák automatikus létrehozása jelenleg alapértelmezés szerint be van kapcsolva.
A következő T-SQL-parancs futtatásával ellenőrizheti, hogy a dedikált SQL-készlet konfigurálva van-e AUTO_CREATE_STATISTICS :
SELECT name, is_auto_create_stats_on
FROM sys.databases
Ha a dedikált SQL-készlet nincs AUTO_CREATE_STATISTICS konfigurálva, javasoljuk, hogy az alábbi parancs futtatásával engedélyezze ezt a tulajdonságot. Cserélje le <your-datawarehouse-name> a dedikált SQL-készlet nevére.
ALTER DATABASE <your-datawarehouse-name>
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 -
CREATE TABLE AS SELECT(CTAS) UPDATEDELETE-
EXPLAINamikor illesztés vagy predikátum jelenlétét észlelik
Feljegyzés
A statisztikák automatikus létrehozása nem történik meg ideiglenes vagy külső táblákon.
A statisztikák automatikus létrehozása szinkron módon történik, így kismértékben csökkenhet 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 a rendszer profilkészítése előtt 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.
Feljegyzés
A statisztikák létrehozását a rendszer egy másik felhasználói környezetben naplózza sys.dm_pdw_exec_requests .
Az automatikus statisztikák létrehozásakor a következő formában jelennek meg: _WA_Sys_<8 digit column id in Hex>_<8 digit table id in Hex>. 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 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 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 új dátumok hozzáadásakor. Minden alkalommal, amikor új sorokat tölt be a dedikált SQL-készletbe, új betöltési dátumokat vagy tranzakciódátumokat ad hozzá. Ezek a kiegészítések megváltoztatják az adateloszlá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. Feltéve, hogy az eloszlás állandó az ügyfelek között, az új sorok hozzáadása a táblázat változatához 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 származó adatokat hoz létre, és 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:
| Statisztikai tulajdonság | Ajánlás |
|---|---|
| A statisztikafrissítések 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áljon alapértelmezett mintavételezést (20 százalék).
Több mint 1 milliárd sor esetén két százalékos mintavételezést használjon. |
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 válaszolható meg az adatok életkorával. 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 lényeges változás történt egy oszlop értékeinek eloszlásában, 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: Keresse meg a statisztikából () és a tényleges sorszámból (
stats_row_countactual_row_count) származó sorok száma közötti különbséget.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_id2. lekérdezés: A statisztikák korának megkereséséhez ellenőrizze, hogy mikor frissültek utoljára a statisztikák az egyes táblákon.
Feljegyzés
Ha egy oszlop értékeinek eloszlása lényegesen megváltozik, 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 sorokat tölt be a dedikált SQL-készletbe, új betöltési dátumokat vagy tranzakciódátumokat ad hozzá. Ezek a kiegészítések megváltoztatják az adateloszlást, és elavultá teszik a statisztikákat.
Ezzel szemben előfordulhat, hogy egy ügyféltábla nemi oszlopának statisztikáit soha nem kell frissíteni. Feltéve, hogy az eloszlás állandó az ügyfelek között, az új sorok hozzáadása a táblázat változatához 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óját.
Statisztikakezelés implementálása
Gyakran érdemes kiterjeszteni az adatbetöltési folyamatot annak érdekében, hogy a terhelés végén a statisztikák frissüljenek, így elkerülheti vagy minimalizálhatja 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 vagy az értékek eloszlását. Az adatbetöltés logikus 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ítson.
- Érdemes lehet gyakrabban frissíteni a növekvő kulcsoszlopokat , például a tranzakciódátumokat, mert ezek az értékek nem szerepelnek a statisztikai hisztogramban.
- 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ág becslése.
Példák: Statisztikák létrehozása
Ezek a példák bemutatják, hogyan használhat különböző beállításokat 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ától függnek.
Egyoszlopos statisztikák létrehozása alapértelmezett beállításokkal
Ha statisztikákat szeretne létrehozni egy oszlopon, adja meg a statisztikai 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 a statisztikák létrehozásakor.
CREATE STATISTICS [statistics_name] ON [schema_name].[table_name]([column_name]);
Példa:
CREATE STATISTICS col1_stats ON dbo.table1 (col1);
Egyoszlopos statisztikák 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. Azonban módosíthatja a mintavételezési sebességet.
A teljes táblázat mintájához használja a következő szintaxist:
CREATE STATISTICS [statistics_name] ON [schema_name].[table_name]([column_name]) WITH FULLSCAN;
Példa:
CREATE STATISTICS col1_stats ON dbo.table1 (col1) WITH FULLSCAN;
Egyoszlopos statisztikák létrehozása a minta méretének megadásával
Másik lehetőségként megadhatja a minta méretét százalékként:
CREATE STATISTICS col1_stats ON dbo.table1 (col1) WITH SAMPLE = 50 PERCENT;
Egyoszlopos statisztikák 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, ami javítja a lekérdezési teljesítményt.
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óban lévő értékek tartományának.
CREATE STATISTICS stats_col1 ON table1(col1) WHERE col1 > '2000101' AND col1 < '20001231';
Feljegyzé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ója között. 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 tekintse meg a CREATE STATISTICS (STATISZTIKÁK LÉTREHOZÁSA) című témakört.
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.
Feljegyzé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 szereplő első oszlophoz érhető el.
Ebben a példában a hisztogram megjelenik product_category. A keresztoszlopok statisztikái a következőkre product_categoryproduct_sub_categoryvannak kiszámítva:
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 többoszlopos product_categorystatisztikai objektumok közöttproduct_sub_category, akkor hasznos lehet, 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, ha parancsokat ad CREATE STATISTICS ki 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 az SQL Server sp_create_stats rendszer tárolt eljárásának megfelelőjével. 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ával.
Az alábbi példa bemutatja, hogyan kezdheti meg az SQL-készlet kialakítását. 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 az alapértelmezett értékekkel szeretné létrehozni, hajtsa végre a tárolt eljárást.
EXEC [dbo].[prc_sqldw_create_stats] 1, NULL;
Ha egy teljes adathalmaz használatával szeretne statisztikákat létrehozni a táblázat összes oszlopán, hívja meg ezt az eljárást.
EXEC [dbo].[prc_sqldw_create_stats] 2, NULL;
Ha a tábla összes oszlopában szeretne mintául szolgáló statisztikát létrehozni, adja meg 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: Frissítési statisztikák
A statisztikák frissítéséhez az alábbiakat végezheti el:
- 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élda:
UPDATE STATISTICS [dbo].[table1] ([stats_col1]);
Bizonyos 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 ahhoz, hogy a legjobb statisztikai objektumokat kell kiválasztani a frissítéshez.
Tábla összes 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élda:
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.
Feljegyzés
Amikor frissíti egy tábla összes statisztikáját, a dedikált SQL-készlet beolvasást végez, hogy mintát vegyen a tábláról az egyes statisztikai objektumokhoz. Ha a táblázat nagy, és sok oszlopot és sok statisztikát tartalmaz, akkor hatékonyabb lehet az egyes statisztikák igény szerinti frissítése.
Az eljárás végrehajtásához UPDATE STATISTICS tekintse meg az ideiglenes táblákat. 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 tekintse meg a Statisztika frissítése című témakört.
Statisztikai metaadatok
Számos rendszernézet és függvény 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 időpontjához.
Katalógusnézetek statisztikákhoz
Ezek a rendszernézetek a statisztikákról nyújtanak információt:
| Katalógusnézet | Leírás |
|---|---|
| sys.columns | Minden oszlophoz egy sor |
| sys.objects | Egy sor az adatbázis minden objektumához |
| sys.schemas | Az adatbázis minden sémájának egy sora |
| sys.stats | Egy sor minden statisztikai objektumhoz |
| sys.stats_columns | Egy sor a statisztikai objektum minden oszlopához; a sys.columnsra mutató hivatkozások |
| sys.tables | Minden táblához tartozik egy sor (beleértve a külső táblákat is) |
| sys.table_types | Minden adattípushoz egy sor |
Rendszerfüggvények statisztikákhoz
Ezek a rendszerfüggvények hasznosak a statisztikák kezeléséhez:
| Rendszerfüggvény | Leírás |
|---|---|
| STATS_DATE | A statisztikai objektum utolsó frissítésének dátuma |
| DBCC SHOW_STATISTICS | Összegző szint és részletes információ az értékek statisztikai objektum által értelmezett eloszlásáról |
Statisztikai oszlopok és függvények egyesítése egyetlen nézetben
Ez a nézet összehozza a függvény statisztikáihoz és eredményeihez STATS_DATE() kapcsolódó oszlopokat.
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
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écmetaadatai. A hisztogram a statisztikai objektum első kulcsoszlopában jeleníti meg az értékek eloszlását. A sűrűségvektor oszlopközi korrelációt mér.
Feljegyzé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élda:
DBCC SHOW_STATISTICS (dbo.table1, stats_col1);
A DBCC SHOW_STATISTICS() egy vagy több részének megjelenítése
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élda:
DBCC SHOW_STATISTICS (dbo.table1, stats_col1) WITH histogram, density_vector
DBCC SHOW_STATISTICS() eltérései
DBCC SHOW_STATISTICS() az SQL Serverhez képest szigorúbban implementálva van a dedikált SQL-készletben:
- 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_INFOMSGSnem állítható be az üzenetek letiltására. - 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.
Kapcsolódó tartalom
Dedikált Azure Synapse Analytics SQL-készlet számítási feladatainak monitorozása DMV-k használatával