Statisztikák a Fabric-adatraktározásban
A következőkre vonatkozik:✅ SQL Analytics-végpont és Warehouse a Microsoft Fabricben
A Microsoft Fabric raktára lekérdezési motorral hoz létre végrehajtási tervet egy adott SQL-lekérdezéshez. Amikor elküld egy lekérdezést, a lekérdezésoptimalizáló megpróbálja számba venni az összes lehetséges tervet, és kiválasztani a leghatékonyabb jelöltet. Annak meghatározásához, hogy melyik terv igényelné a legkisebb többletterhelést (I/O, CPU, memória), a motornak képesnek kell lennie kiértékelni az egyes operátorok által feldolgozható munka vagy sorok mennyiségét. Ezután az egyes tervek költségei alapján kiválasztja azt, amelyik a legkisebb becsült munkamennyiséggel van elszámolva. A statisztikák olyan objektumok, amelyek releváns információkat tartalmaznak az adatokról, hogy a lekérdezésoptimalizáló megbecsülhesse ezeket a költségeket.
Statisztikák használata
Az optimális lekérdezési teljesítmény érdekében fontos, hogy pontos statisztikák legyenek. A Microsoft Fabric jelenleg a következő útvonalakat támogatja a releváns és naprakész statisztikák biztosításához:
- Felhasználó által megadott statisztikák
- A felhasználó manuálisan használja az adatdefiníciós nyelv (DDL) szintaxisát a statisztikai adatok szükség szerinti létrehozásához, frissítéséhez és elvetéséhez
- Automatikus statisztikák
- A motor automatikusan létrehozza és karbantartja a statisztikákat a lekérdezési időpontban
Az összes tábla manuális statisztikái
A statisztikai állapot fenntartásának hagyományos lehetősége a Microsoft Fabricben érhető el. A felhasználók létrehozhatnak, frissíthetnek és elvethetnek hisztogramalapú egyoszlopos statisztikákat a CREATE STATISTICS, UPDATE STATISTICS és DROP STATISTICS használatával. A felhasználók megtekinthetik a hisztogramalapú egyoszlopos statisztikák tartalmát a DBCC SHOW_STATISTICS. Jelenleg ezeknek az utasításoknak a korlátozott verziója támogatott.
- Ha manuálisan hoz létre statisztikákat, fontolja meg, hogy a lekérdezési számítási feladatban erősen használt oszlopokra összpontosít (különösen a GROUP BYs, ORDER BYs, filters és JOINs esetén).
- Érdemes lehet rendszeresen frissíteni az oszlopszintű statisztikákat az adatváltozások után, amelyek jelentősen megváltoztatják az adatok sorszámát vagy eloszlását.
Példák a manuális statisztikák karbantartására
Statisztikai adatok létrehozása a táblán az dbo.DimCustomer
oszlop CustomerKey
összes sora alapján:
CREATE STATISTICS DimCustomer_CustomerKey_FullScan
ON dbo.DimCustomer (CustomerKey) WITH FULLSCAN;
A statisztikai objektum DimCustomer_CustomerKey_FullScan
manuális frissítése , esetleg egy nagy adatfrissítés után:
UPDATE STATISTICS dbo.DimCustomer (DimCustomer_CustomerKey_FullScan) WITH FULLSCAN;
A statisztikai objektummal kapcsolatos információk megjelenítése:
DBCC SHOW_STATISTICS ("dbo.DimCustomer", "DimCustomer_CustomerKey_FullScan");
Csak a statisztikai objektum hisztogramjával kapcsolatos információk megjelenítése:
DBCC SHOW_STATISTICS ("dbo.DimCustomer", "DimCustomer_CustomerKey_FullScan") WITH HISTOGRAM;
A statisztikai objektum DimCustomer_CustomerKey_FullScan
manuális elvetése:
DROP STATISTICS dbo.DimCustomer.DimCustomer_CustomerKey_FullScan;
A következő T-SQL-objektumokkal manuálisan létrehozott és automatikusan létrehozott statisztikák is ellenőrizhetők a Microsoft Fabricben:
- sys.stats katalógusnézet
- sys.stats_columns katalógusnézet
- STATS_DATE rendszerfüggvény
Automatikus statisztikák lekérdezéskor
Amikor lekérdezést és lekérdezésoptimalizálót ad ki, a tervfeltáráshoz statisztikákra van szükség, a Microsoft Fabric automatikusan létrehozza ezeket a statisztikákat, ha még nem léteznek. A statisztikák létrehozása után a lekérdezésoptimalizáló felhasználhatja őket az eseményindító lekérdezés tervköltségeinek becsléséhez. Ezenkívül ha a lekérdezési motor megállapítja, hogy a lekérdezés szempontjából releváns meglévő statisztikák már nem tükrözik pontosan az adatokat, a rendszer automatikusan frissíti ezeket a statisztikákat. Mivel ezek az automatikus műveletek szinkron módon történnek, a lekérdezés időtartama várhatóan ekkora lesz, ha a szükséges statisztikák még nem léteznek, vagy jelentős adatváltozások történtek a legutóbbi statisztikai frissítés óta.
Automatikus statisztikák ellenőrzése lekérdezéskor
Különböző esetekben számíthat bizonyos típusú automatikus statisztikákra. A leggyakoribbak a hisztogramalapú statisztikák, amelyeket a lekérdezésoptimalizáló kér a GROUP BYs, JOINs, DISTINCT záradékok, szűrők (WHERE záradékok) és ORDER BYs oszlopokhoz. Ha például látni szeretné ezeknek a statisztikáknak az automatikus létrehozását, egy lekérdezés aktiválja a létrehozást, ha a statisztikák még nem léteznek COLUMN_NAME
. Példa:
SELECT <COLUMN_NAME>
FROM <YOUR_TABLE_NAME>
GROUP BY <COLUMN_NAME>;
Ebben az esetben arra kell számítania, hogy a statisztikák COLUMN_NAME
létre lettek hozva. Ha az oszlop szintén varchar oszlop volt, akkor az átlagos oszlophossz-statisztikák is létrejönnek. Ha ellenőrizni szeretné, hogy a statisztikák automatikusan létre lettek-e hozva, futtassa a következő lekérdezést:
select
object_name(s.object_id) AS [object_name],
c.name AS [column_name],
s.name AS [stats_name],
s.stats_id,
STATS_DATE(s.object_id, s.stats_id) AS [stats_update_date],
s.auto_created,
s.user_created,
s.stats_generation_method_desc
FROM sys.stats AS s
INNER JOIN sys.objects AS o
ON o.object_id = s.object_id
LEFT JOIN sys.stats_columns AS sc
ON s.object_id = sc.object_id
AND s.stats_id = sc.stats_id
LEFT JOIN sys.columns AS c
ON sc.object_id = c.object_id
AND c.column_id = sc.column_id
WHERE o.type = 'U' -- Only check for stats on user-tables
AND s.auto_created = 1
AND o.name = '<YOUR_TABLE_NAME>'
ORDER BY object_name, column_name;
Most már megtalálhatja az statistics_name
automatikusan létrehozott hisztogramstatisztikát (ennek hasonlónak _WA_Sys_00000007_3B75D760
kell lennie), és futtathatja a következő T-SQL-t:
DBCC SHOW_STATISTICS ('<YOUR_TABLE_NAME>', '<statistics_name>');
Példa:
DBCC SHOW_STATISTICS ('sales.FactInvoice', '_WA_Sys_00000007_3B75D760');
A Updated
DBCC SHOW_STATISTICS eredményhalmazában az eredeti GROUP BY lekérdezés futtatásakor megadott dátumhoz (UTC) hasonló értéknek kell lennie.
Ezeket az automatikusan generált statisztikákat ezután a lekérdezési motor a későbbi lekérdezésekben is felhasználhatja a tervköltségek és a végrehajtás hatékonyságának javítása érdekében. Ha elegendő módosítás történik a táblában, a lekérdezési motor ezeket a statisztikákat is frissíti a lekérdezésoptimalizálás javítása érdekében. Ugyanez az előző mintagyakorlat a táblázat jelentős módosítása után is alkalmazható. A Fabricben az SQL-lekérdezési motor ugyanazt az újrafordítási küszöbértéket használja, mint az SQL Server 2016 (13.x) a statisztikák frissítéséhez.
Az automatikusan létrehozott statisztikák típusai
A Microsoft Fabricben több statisztikai típus is létezik, amelyeket a motor automatikusan generál a lekérdezési tervek javítása érdekében. Jelenleg a sys.statsban találhatók, bár nem mindegyik használható:
- Hisztogramstatisztikák
- A lekérdezési időpontban hisztogramstatisztikát igénylő oszloponként létrehozva
- Ezek az objektumok hisztogramot és sűrűségadatokat tartalmaznak egy adott oszlop eloszlására vonatkozóan. A dedikált Azure Synapse Analytics-készletekben a lekérdezési időpontban automatikusan létrehozott statisztikákhoz hasonlóan.
- A név ekkor
_WA_Sys_
kezdődik: . - A tartalom megtekinthető a DBCC SHOW_STATISTICS
- Átlagos oszlophossz-statisztikák
- A 100-nál nagyobb változó karakterű oszlopokhoz (varchar) létrehozva, és lekérdezéskor átlagos oszlophosszra van szükség.
- Ezek az objektumok a varchar oszlop átlagos sorméretét jelölő értéket tartalmaznak a statisztikák létrehozásakor.
- A név ekkor
ACE-AverageColumnLength_
kezdődik: . - A tartalom nem tekinthető meg, és a felhasználó nem tudja megjeleníteni.
- Táblázatalapú számosságstatisztika
- A lekérdezési időpontban számosságbecslést igénylő táblánként létrehozva.
- Ezek az objektumok egy tábla sorszámának becslését tartalmazzák.
- Névvel elnevezve
ACE-Cardinality
. - A tartalom nem tekinthető meg, és a felhasználó nem tudja megjeleníteni.
Korlátozások
- Csak egyoszlopos hisztogram-statisztikák hozhatók létre és módosíthatók manuálisan.
- A többoszlopos statisztikák létrehozása nem támogatott.
- Más statisztikai objektumok megjelenhetnek a sys.stats-ban a manuálisan létrehozott statisztikákon és az automatikusan létrehozott statisztikákon kívül. Ezeket az objektumokat a rendszer nem használja a lekérdezésoptimalizáláshoz.