Materialiserade vyer
Materialiserade vyer exponerar en aggregeringsfråga över en källtabell eller över en annan materialiserad vy.
Materialiserade vyer returnerar alltid ett uppdaterat resultat av aggregeringsfrågan (alltid färsk). Det är bättre att köra frågor mot en materialiserad vy än att köra aggregeringen direkt över källtabellen.
Anteckning
- Om du vill avgöra om materialiserade vyer är lämpliga för dig kan du granska användningsfallen för materialiserade vyer.
- Materialiserade vyer har vissa begränsningar. Granska prestandaövervägandena innan du arbetar med funktionen.
- Överväg att använda uppdateringsprinciper där det är lämpligt. Mer information finns i Materialiserade vyer jämfört med uppdateringsprinciper.
- Övervaka hälsotillståndet för dina materialiserade vyer baserat på rekommendationerna i Övervaka materialiserade vyer.
Varför ska man använda materialiserade vyer?
Genom att investera resurser (datalagring, processorcykler i bakgrunden) för materialiserade vyer av vanliga aggregeringar får du följande fördelar:
Prestandaförbättring: Att fråga en materialiserad vy presterar vanligtvis bättre än att fråga källtabellen om samma sammansättningsfunktioner.
Friskhet: En materialiserad vyfråga returnerar alltid de mest aktuella resultaten, oberoende av när materialiseringen senast ägde rum. Frågan kombinerar den materialiserade delen av vyn med posterna i källtabellen, som ännu inte har materialiserats (
delta
delen), vilket alltid ger de mest aktuella resultaten.Kostnadsminskning:Att fråga en materialiserad vy förbrukar mindre resurser från klustret än att utföra aggregeringen över källtabellen. Kvarhållningsprincipen för källtabellen kan minskas om endast aggregering krävs. Den här konfigurationen minskar kostnaderna för frekvent cachelagring för källtabellen.
Exempel på användningsfall finns i Användningsfall för materialiserad vy.
Så här fungerar materialiserade vyer
En materialiserad vy består av två komponenter:
- En materialiserad del – en tabell som innehåller aggregerade poster från källtabellen, som redan har bearbetats. Den här tabellen innehåller alltid en enda post per sammansättnings kombination gruppera efter.
- En delta – de nyligen inmatade posterna i källtabellen som ännu inte har bearbetats.
När du kör frågor mot den materialiserade vyn kombineras den materialiserade delen med deltadelen, vilket ger ett uppdaterat resultat av aggregeringsfrågan. Materialiseringsprocessen offline matar in nya poster från delta till den materialiserade tabellen och uppdaterar befintliga poster. Om skärningspunkten mellan deltat och den materialiserade delen är stor och många poster kräver uppdateringar, kan detta ha en negativ inverkan på materialiseringsprocessen. Se Övervaka materialiserade vyer om hur du felsöker sådana situationer.
Frågor om materialiserade vyer
Det finns två sätt att köra frågor mot en materialiserad vy:
Fråga hela vyn: när du frågar den materialiserade vyn efter dess namn, på samma sätt som du frågar en tabell, kombinerar den materialiserade vyfrågan den materialiserade delen av vyn med posterna i källtabellen som inte har materialiserats ännu (
delta
).- Om du frågar den materialiserade vyn returneras alltid de mest aktuella resultaten, baserat på alla poster som matas in i källtabellen. Mer information om materialiserade och icke-materialiserade delar i materialiserad vy finns i hur materialiserade vyer fungerar.
- Det här alternativet kanske inte presterar bäst eftersom det behöver materialisera
delta
delen under frågetiden. Prestanda i det här fallet beror på vyns ålder och de filter som tillämpas i frågan. Avsnittet för frågeoptimerare för materialiserad vy innehåller möjliga sätt att förbättra frågeprestanda när du kör frågor mot hela vyn.
Fråga endast den materialiserade delen: ett annat sätt att fråga vyn är att använda
materialized_view()
funktionen . Det här alternativet stöder endast frågor mot den materialiserade delen av vyn, samtidigt som du anger den maximala svarstid som användaren är villig att tolerera.- Det här alternativet är inte garanterat att returnera de mest aktuella posterna, men det bör alltid vara mer högpresterande än att fråga hela vyn.
- Den här funktionen är användbar för scenarier där du är villig att offra viss aktualitet för prestanda, till exempel för telemetriinstrumentpaneler.
Tips
Frågor över den materialiserade delen presterar bara bättre än att fråga hela vyn. Använd materialized_view()
alltid funktionen när det är tillämpligt för ditt användningsfall.
Materialiserade vyer deltar i frågor mellan kluster eller mellan databaser, men ingår inte i unioner eller sökningar med jokertecken.
- I följande exempel ingår alla materialiserade vyer med namnet
ViewName
:
cluster('cluster1').database('db').ViewName cluster('cluster1').database('*').ViewName database('*').ViewName database('DB*').ViewName database('*').materialized_view('ViewName') database('DB*').materialized_view('ViewName')
- I följande exempel ingår inte poster från materialiserade vyer:
cluster('cluster1').database('db').* database('*').View* search in (*) search *
- I följande exempel ingår alla materialiserade vyer med namnet
Frågeoptimerare för materialiserad vy
När du kör frågor mot hela vyn kombineras den materialiserade delen med delta
under frågetiden. Detta inkluderar att aggregera delta
och koppla den med den materialiserade delen.
- Det går bättre att köra frågor mot hela vyn om frågan innehåller filter i gruppen efter nycklar för den materialiserade vyfrågan. Se fler tips om hur du skapar en materialiserad vy, baserat på ditt frågemönster, i
.create materialized-view
avsnittet prestandatips . - Frågeoptimeraren väljer sammanfatta/koppla strategier som förväntas förbättra frågeprestanda. Till exempel baseras beslutet om huruvida frågan ska blandas på ett visst antal poster
delta
. Följande egenskaper för klientbegäran ger viss kontroll över de optimeringar som tillämpas. Du kan testa dessa egenskaper med dina materialiserade vyfrågor och utvärdera deras inverkan på frågeprestanda.
Egenskapsnamn för klientbegäran | Typ | Description |
---|---|---|
materialized_view_query_optimization_costbased_enabled |
bool |
Om det är inställt på false inaktiveras summarize/join-optimeringar i materialiserade vyfrågor. Använder standardstrategier. Standardvärdet är true . |
materialized_view_shuffle |
dynamic |
Framtvinga blandning av den materialiserade vyfrågan och (om du vill) ange specifika nycklar att blanda med. Se exempel nedan. |
Exempel
Fråga hela vyn. De senaste posterna i källtabellen ingår:
ViewName
Fråga endast den materialiserade delen av vyn, oavsett när den senast materialiserades.
materialized_view("ViewName")
Fråga hela vyn och ange ett "tips" för att använda
shuffle
en strategi. De senaste posterna i källtabellen ingår:- Exempel 1: blanda baserat på
Id
kolumnen (på samma sätt som med ):hint.shufflekey=Id
set materialized_view_shuffle = dynamic([{"Name" : "ViewName", "Keys" : [ "Id" ] }]); ViewName
- Exempel 2: blanda baserat på alla nycklar (på samma sätt som när du använder
hint.strategy=shuffle
):
set materialized_view_shuffle = dynamic([{"Name" : "ViewName" }]); ViewName
- Exempel 1: blanda baserat på
Saker att tänka på gällande prestanda
De viktigaste bidragande faktorerna som kan påverka en materialiserad vyhälsa är:
Klusterresurser: Precis som andra processer som körs i klustret förbrukar materialiserade vyer resurser (CPU, minne) från klustret. Om klustret är överbelastat kan det orsaka en försämring av klustrets prestanda om du lägger till materialiserade vyer i det. Övervaka klustrets hälsa med hjälp av hälsomått för kluster. Optimerad autoskalning tar för närvarande inte hänsyn till materialiserade vyers hälsa som en del av reglerna för autoskalning.
- Materialiseringsprocessen begränsas av mängden minne och cpu som kan förbrukas. Dessa gränser definieras och kan ändras i arbetsbelastningsgruppen för materialiserade vyer.
Överlappa med materialiserade data: Under materialiseringen bearbetas och materialiseras alla nya poster som matats in i källtabellen sedan den senaste materialiseringen (deltat) i vyn. Ju högre skärningspunkten mellan nya poster och redan materialiserade poster är, desto sämre blir prestandan för den materialiserade vyn. En materialiserad vy fungerar bäst om antalet poster som uppdateras (till exempel i
arg_max
vyn) är en liten delmängd av källtabellen. Om alla eller de flesta av de materialiserade vyposterna behöver uppdateras i varje materialiseringscykel kanske den materialiserade vyn inte fungerar bra.Inmatningshastighet: Det finns inga hårdkodade gränser för datavolymen eller datainmatningshastigheten i källtabellen för den materialiserade vyn. Den rekommenderade inmatningshastigheten för materialiserade vyer är dock högst 1–2 GB/s. Högre datainmatningshastigheter kan fortfarande fungera bra. Prestanda beror på klusterstorlek, tillgängliga resurser och mängden skärningspunkt med befintliga data.
Antal materialiserade vyer i klustret: Ovanstående överväganden gäller för varje enskild materialiserad vy som definierats i klustret. Varje vy förbrukar sina egna resurser och många vyer konkurrerar med varandra om tillgängliga resurser. Även om det inte finns några hårdkodade gränser för antalet materialiserade vyer i ett kluster kanske klustret inte kan hantera alla materialiserade vyer när många har definierats. Kapacitetsprincipen kan justeras om det finns mer än en enda materialiserad vy i klustret. Öka värdet
ClusterMinimumConcurrentOperations
för i principen för att köra mer materialiserade vyer samtidigt.Definition av materialiserad vy: Definitionen av den materialiserade vyn måste definieras enligt bästa praxis för frågor för bästa frågeprestanda. Mer information finns i Skapa tips för kommandoprestanda.
Materialiserad vy över materialiserad vy
En materialiserad vy kan skapas över en annan materialiserad vy om den materialiserade källvyn är en dedupliceringsvy. Mer specifikt måste aggregeringen av den materialiserade källvyn vara take_any(*)
för att deduplicera källposter. Den andra materialiserade vyn kan använda alla aggregeringsfunktioner som stöds. Specifik information om hur du skapar en materialiserad vy över en materialiserad vy finns i.create materialized-view
kommandot .
Tips
När du kör frågor mot en materialiserad vy som definieras över en annan materialiserad vy rekommenderar vi att du bara frågar den materialiserade delen med hjälp av materialized_view()
funktionen. Det går inte att köra frågor mot hela vyn när båda vyerna inte är helt materialiserade. Mer information finns i materialiserade vyer frågor.
Relaterat innehåll
Feedback
https://aka.ms/ContentUserFeedback.
Kommer snart: Under hela 2024 kommer vi att fasa ut GitHub-problem som feedbackmekanism för innehåll och ersätta det med ett nytt feedbacksystem. Mer information finns i:Skicka och visa feedback för