Materializovaná zobrazení
Materializovaná zobrazení zveřejňují agregační dotaz nad zdrojovou tabulkou nebo jiným materializovaným zobrazením.
Materializovaná zobrazení vždy vrátí aktuální výsledek agregačního dotazu (vždy aktuální). Dotazování materializovaného zobrazení je výkonnější než spuštění agregace přímo ve zdrojové tabulce.
Poznámka
- Pokud se chcete rozhodnout, jestli jsou pro vás materializovaná zobrazení vhodná, projděte si případy použití materializovaných zobrazení.
- Materializovaná zobrazení mají určitá omezení. Než začnete s funkcí pracovat, projděte si důležité informace o výkonu.
- Pokud je to vhodné, zvažte použití zásad aktualizace . Další informace najdete v tématu Materializovaná zobrazení vs. zásady aktualizace.
- Monitorujte stav materializovaných zobrazení na základě doporučení v tématu Monitorování materializovaných zobrazení.
Proč používat materializovaná zobrazení?
Investicem prostředků (úložiště dat, cykly procesoru na pozadí) pro materializovaná zobrazení běžně používaných agregací získáte následující výhody:
Zlepšení výkonu: Dotazování materializovaného zobrazení obvykle funguje lépe než dotazování zdrojové tabulky na stejné agregační funkce.
Čerstvost: Dotaz materializovaného zobrazení vždy vrátí nejaktuálnější výsledky bez ohledu na to, kdy k materializaci naposledy došlo. Dotaz zkombinuje materializovanou část zobrazení se záznamy ve zdrojové tabulce, které ještě nebyly materializovány (část),
delta
a vždy poskytují nejaktuálnější výsledky.Snížení nákladů:Dotazování materializovaného zobrazení spotřebovává méně prostředků z clusteru než agregace přes zdrojovou tabulku. Zásady uchovávání informací u zdrojové tabulky je možné snížit, pokud je vyžadována pouze agregace. Toto nastavení snižuje náklady na horkou mezipaměť pro zdrojovou tabulku.
Příklady případů použití najdete v tématu Případy použití materializovaného zobrazení.
Jak fungují materializovaná zobrazení
Materializované zobrazení se skládá ze dvou součástí:
- Materializovaná část – tabulka obsahující agregované záznamy ze zdrojové tabulky, které už byly zpracovány. Tato tabulka vždy obsahuje jeden záznam pro každou kombinaci agregace seskupování.
- Delta – nově ingestované záznamy ve zdrojové tabulce, které ještě nebyly zpracovány.
Dotazování materializovaného zobrazení kombinuje materializovanou část s rozdílovou částí a poskytuje aktuální výsledek agregačního dotazu. Offline proces materializace ingestuje nové záznamy z tabulky delta do materializované tabulky a aktualizuje existující záznamy. Pokud je průsečík mezi rozdílovou a materializovanou částí velký a mnoho záznamů vyžaduje aktualizaci, může to mít negativní dopad na proces materializace. Informace o řešení takových situací najdete v tématu Monitorování materializovaných zobrazení .
Dotazy materializovaných zobrazení
Existují 2 způsoby dotazování materializovaného zobrazení:
Dotaz na celé zobrazení: Když dotazujete materializované zobrazení podle jeho názvu, podobně jako dotazování tabulky, dotaz materializovaného zobrazení zkombinuje materializovanou část zobrazení se záznamy ve zdrojové tabulce, které ještě nebyly materializovány ().
delta
- Dotazování materializovaného zobrazení vždy vrátí nejaktuálnější výsledky na základě všech záznamů přijatých do zdrojové tabulky. Další informace o materializovaných a ne materializovaných částech v materializovaném zobrazení najdete v tématu o tom, jak materializovaná zobrazení fungují.
- Tato možnost nemusí fungovat nejlépe, protože potřebuje materializovat
delta
část během doby dotazu. Výkon v tomto případě závisí na stáří zobrazení a filtrech použitých v dotazu. Část optimalizátoru dotazů materializovaného zobrazení obsahuje možné způsoby, jak zlepšit výkon dotazů při dotazování na celé zobrazení.
Dotazování pouze na materializovanou část: Dalším způsobem dotazování zobrazení je použití
materialized_view()
funkce . Tato možnost podporuje dotazování pouze materializované části zobrazení a určuje maximální latenci, která je uživatel ochotný tolerovat.- Tato možnost nezaručuje, že vrátí nejaktuálnější záznamy, ale vždy by měla být výkonnější než dotazování celého zobrazení.
- Tato funkce je užitečná pro scénáře, ve kterých jste ochotni obětovat určitou aktuálnost výkonu, například u řídicích panelů telemetrie.
Tip
Dotazy pouze na materializovanou část vždy fungují lépe než dotazování celého zobrazení. Funkci vždy používejte, materialized_view()
pokud je to možné pro váš případ použití.
Materializovaná zobrazení se podílejí na dotazech mezi clustery nebo mezi databázemi, ale nejsou zahrnuta do sjednocení se zástupnými znamény nebo hledání.
- Všechny následující příklady zahrnují materializovaná zobrazení s názvem
ViewName
:
cluster('cluster1').database('db').ViewName cluster('cluster1').database('*').ViewName database('*').ViewName database('DB*').ViewName database('*').materialized_view('ViewName') database('DB*').materialized_view('ViewName')
- Následující příklady nezahrnují záznamy z materializovaných zobrazení:
cluster('cluster1').database('db').* database('*').View* search in (*) search *
- Všechny následující příklady zahrnují materializovaná zobrazení s názvem
Optimalizátor dotazů materializovaného zobrazení
Při dotazování celého zobrazení se materializovaná část zkombinuje s delta
během doby dotazu. To zahrnuje agregaci delta
a spojení s materializovanou částí.
- Dotazování celého zobrazení funguje lépe, pokud dotaz obsahuje filtry pro seskupení podle klíčů dotazu materializovaného zobrazení. Další tipy k vytvoření materializovaného zobrazení na základě vzoru dotazu najdete v části s tipy pro zvýšení výkonu
.create materialized-view
. - Optimalizátor dotazů zvolí strategie sumarizace/spojení, u které se očekává zvýšení výkonu dotazů. Například rozhodnutí o tom, jestli se má dotaz náhodně prohazovat, vychází z počtu záznamů zčásti
delta
. Následující vlastnosti požadavků klienta poskytují určitou kontrolu nad použitými optimalizacemi. Tyto vlastnosti můžete otestovat pomocí materializovaných dotazů zobrazení a vyhodnotit jejich dopad na výkon dotazů.
Název vlastnosti žádosti klienta | Typ | Description |
---|---|---|
materialized_view_query_optimization_costbased_enabled |
bool |
Pokud je tato možnost nastavená na false , zakáže optimalizaci souhrnu/spojení v dotazech materializovaného zobrazení. Používá výchozí strategie. Výchozí je true . |
materialized_view_shuffle |
dynamic |
Vynuťte náhodné prohazování dotazu materializovaného zobrazení a (volitelně) zadejte konkrétní klíče pro náhodné prohazování. Podívejte se na příklady níže. |
Příklady
Zadejte dotaz na celé zobrazení. Nejnovější záznamy ve zdrojové tabulce jsou zahrnuty:
ViewName
Dotazujte pouze materializovanou část zobrazení, bez ohledu na to, kdy byla naposledy materializována.
materialized_view("ViewName")
Zadejte dotaz na celé zobrazení a zadejte "nápovědu", jak použít
shuffle
strategii. Nejnovější záznamy ve zdrojové tabulce jsou zahrnuty:- Příklad č. 1: náhodné prohození na
Id
základě sloupce (podobně jako při použitíhint.shufflekey=Id
):
set materialized_view_shuffle = dynamic([{"Name" : "ViewName", "Keys" : [ "Id" ] }]); ViewName
- Příklad č. 2: náhodné na základě všech klíčů (podobně jako při použití
hint.strategy=shuffle
):
set materialized_view_shuffle = dynamic([{"Name" : "ViewName" }]); ViewName
- Příklad č. 1: náhodné prohození na
Otázky výkonu
Hlavní přispěvatelé, kteří můžou ovlivnit stav materializovaného zobrazení, jsou:
Prostředky clusteru: Stejně jako jakýkoli jiný proces spuštěný v clusteru i materializovaná zobrazení spotřebovávají prostředky (procesor, paměť) z clusteru. Pokud je cluster přetížený, přidání materializovaných zobrazení do něj může způsobit snížení výkonu clusteru. Monitorujte stav clusteru pomocí metrik stavu clusteru. Optimalizované automatické škálování v současné době nebere v úvahu stav materializovaných zobrazení v rámci pravidel automatického škálování.
- Proces materializace je omezený množstvím paměti a procesoru, které může spotřebovat. Tato omezení jsou definovaná a dají se změnit ve skupině úloh materializovaných zobrazení.
Překrytí s materializovanými daty: Během materializace se všechny nové záznamy ingestované do zdrojové tabulky od poslední materializace (delta) zpracují a materializují do zobrazení. Čím vyšší je průsečík mezi novými záznamy a již materializovanými záznamy, tím horší bude výkon materializovaného zobrazení. Materializované zobrazení funguje nejlépe, pokud je počet aktualizovaných záznamů (například v
arg_max
zobrazení) malou podmnožinou zdrojové tabulky. Pokud je potřeba aktualizovat všechny nebo většinu materializovaných záznamů zobrazení v každém materializačním cyklu, nemusí materializované zobrazení fungovat správně.Rychlost příjmu dat: Ve zdrojové tabulce materializovaného zobrazení neexistují žádná pevně zakódovaná omezení objemu dat ani rychlosti příjmu dat. Doporučená rychlost příjmu dat pro materializovaná zobrazení však není vyšší než 1–2 GB/s. Vyšší rychlost příjmu dat může stále fungovat dobře. Výkon závisí na velikosti clusteru, dostupných prostředcích a množství průniku se stávajícími daty.
Počet materializovaných zobrazení v clusteru: Výše uvedené aspekty platí pro každé jednotlivé materializované zobrazení definované v clusteru. Každé zobrazení využívá své vlastní prostředky a mnoho zobrazení soupeří o dostupné prostředky. I když neexistují žádná pevně zakódovaná omezení počtu materializovaných zobrazení v clusteru, cluster nemusí být schopen zpracovat všechna materializovaná zobrazení, pokud je definováno mnoho. Zásady kapacity je možné upravit, pokud je v clusteru více než jedno materializované zobrazení. Zvyšte hodnotu v zásadách
ClusterMinimumConcurrentOperations
, aby se souběžně spustilo více materializovaných zobrazení.Definice materializovaného zobrazení: Definice materializovaného zobrazení musí být definována v souladu s osvědčenými postupy pro dotazy pro zajištění nejlepšího výkonu dotazů. Další informace najdete v článku o vytváření tipů k výkonu příkazů.
Materializované zobrazení nad materializovaným zobrazením
Materializované zobrazení lze vytvořit nad jiným materializovaným zobrazením, pokud je zdrojové materializované zobrazení zobrazením odstranění duplicit. Konkrétně agregace zdrojového materializovaného zobrazení musí být take_any(*)
za účelem odstranění duplicit zdrojových záznamů. Druhé materializované zobrazení může používat jakékoli podporované agregační funkce. Konkrétní informace o tom, jak vytvořit materializované zobrazení v materializovaném zobrazení, najdete v tématu .create materialized-view
command.
Tip
Při dotazování materializovaného zobrazení, které je definováno v jiném materializovaném zobrazení, doporučujeme dotazovat materializovanou část pouze pomocí materialized_view()
funkce. Dotazování celého zobrazení není výkonné, pokud nejsou plně materializovaná obě zobrazení. Další informace najdete v tématu dotazy materializovaných zobrazení.
Související obsah
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro