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 kihasználása

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:

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 a lekérdezési számítási feladatokban (különösen a GROUP BYs, ORDER BYs, filters és JOINs csoportokban) használt adatokra való összpontosítást.
  • É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_FullScanmanuá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_FullScanmanuá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 ad ki, és a lekérdezés-optimalizáló statisztikai adatokat igényel a tervfeltáráshoz, 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 
INNER JOIN sys.stats_columns AS sc 
ON s.object_id = sc.object_id 
AND s.stats_id = sc.stats_id 
INNER 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;

Ez a lekérdezés csak oszlopalapú statisztikákat keres. Ha meg szeretné tekinteni a táblához tartozó összes statisztikát, távolítsa el a JOIN-eket és sys.stats_columnssys.columnsa .

Most már megtalálhatja az statistics_name automatikusan létrehozott hisztogramstatisztikát (ennek hasonlónak _WA_Sys_00000007_3B75D760kell 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.