Zmaterializowane widoki
Zmaterializowane widoki uwidaczniają zapytanie agregacji w tabeli źródłowej lub w innym zmaterializowanym widoku.
Zmaterializowane widoki zawsze zwracają aktualny wynik zapytania agregacji (zawsze świeże). Wykonywanie zapytań względem zmaterializowanego widoku jest bardziej wydajne niż uruchamianie agregacji bezpośrednio nad tabelą źródłową.
Uwaga
- Aby zdecydować, czy zmaterializowane widoki są odpowiednie dla Ciebie, przejrzyj zmaterializowane przypadki użycia widoków.
- Zmaterializowane widoki mają pewne ograniczenia. Przed rozpoczęciem pracy z funkcją zapoznaj się z zagadnieniami dotyczącymi wydajności.
- W razie potrzeby rozważ użycie zasad aktualizacji . Aby uzyskać więcej informacji, zobacz zmaterializowane widoki a zasady aktualizacji.
- Monitoruj kondycję zmaterializowanych widoków na podstawie zaleceń w temacie Monitorowanie zmaterializowanych widoków.
Dlaczego warto używać zmaterializowanych widoków?
Inwestując zasoby (magazyn danych, cykle procesora CPU w tle) dla zmaterializowanych widoków często używanych agregacji, uzyskujesz następujące korzyści:
Poprawa wydajności: Wykonywanie zapytań względem zmaterializowanego widoku zwykle działa lepiej niż wykonywanie zapytań względem tabeli źródłowej dla tych samych funkcji agregacji.
Świeżość: Zmaterializowane zapytanie widoku zawsze zwraca najbardziej aktualne wyniki, niezależnie od czasu ostatniego zmaterializacji. Zapytanie łączy zmaterializowaną część widoku z rekordami w tabeli źródłowej, które nie zostały jeszcze zmaterializowane (część
delta
), zawsze dostarczając najbardziej aktualne wyniki.Obniżenie kosztów:wykonywanie zapytań względem zmaterializowanego widoku zużywa mniej zasobów z klastra niż agregacja w tabeli źródłowej. Zasady przechowywania tabeli źródłowej można zmniejszyć, jeśli wymagana jest tylko agregacja. Ta konfiguracja zmniejsza koszty gorącej pamięci podręcznej dla tabeli źródłowej.
Na przykład przypadki użycia można znaleźć w temacie Materialized view use cases (Zmaterializowane przypadki użycia widoku).
Jak działają zmaterializowane widoki
Zmaterializowany widok składa się z dwóch składników:
- Zmaterializowana część — tabela zawierająca zagregowane rekordy z tabeli źródłowej, które zostały już przetworzone. Ta tabela zawsze zawiera pojedynczy rekord dla kombinacji grup agregacji.
- Delta — nowo pozyskane rekordy w tabeli źródłowej, które nie zostały jeszcze przetworzone.
Wykonywanie zapytań względem zmaterializowanego widoku łączy zmaterializowaną część z częścią różnicową, zapewniając aktualny wynik zapytania agregacji. Proces materializacji w trybie offline pozyskuje nowe rekordy z delty do zmaterializowanej tabeli i aktualizuje istniejące rekordy. Jeśli część wspólna między różnicą a zmaterializowaną częścią jest duża, a wiele rekordów wymaga aktualizacji, może to mieć negatywny wpływ na proces materializacji. Zobacz monitorowanie zmaterializowanych widoków na temat rozwiązywania takich sytuacji.
Zmaterializowane zapytania dotyczące widoków
Istnieją 2 sposoby wykonywania zapytań dotyczących zmaterializowanego widoku:
Wykonaj zapytanie dotyczące całego widoku: podczas wykonywania zapytania względem zmaterializowanego widoku według jego nazwy, podobnie jak w przypadku wykonywania zapytań dotyczących tabeli, zmaterializowane zapytanie widoku łączy zmaterializowaną część widoku z rekordami w tabeli źródłowej, które nie zostały jeszcze zmaterializowane ().
delta
- Wykonywanie zapytań względem zmaterializowanego widoku zawsze zwraca najbardziej aktualne wyniki na podstawie wszystkich rekordów pozyskanych do tabeli źródłowej. Aby uzyskać więcej informacji na temat zmaterializowanych i niezmaterializowanych części w zmaterializowanym widoku, zobacz jak działają zmaterializowane widoki.
- Ta opcja może nie działać najlepiej, ponieważ musi zmaterializować
delta
część w czasie zapytania. Wydajność w tym przypadku zależy od wieku widoku i filtrów zastosowanych w zapytaniu. Sekcja zmaterializowanego optymalizatora zapytań zawiera możliwe sposoby poprawy wydajności zapytań podczas wykonywania zapytań względem całego widoku.
Wykonaj zapytanie tylko w zmaterializowanej części: innym sposobem wykonywania zapytań względem widoku jest użycie
materialized_view()
funkcji . Ta opcja obsługuje wykonywanie zapytań tylko zmaterializowanej części widoku, określając maksymalne opóźnienie, które użytkownik chce tolerować.- Ta opcja nie gwarantuje zwrócenia najbardziej aktualnych rekordów, ale zawsze powinna być bardziej wydajna niż wykonywanie zapytań względem całego widoku.
- Ta funkcja jest przydatna w scenariuszach, w których chcesz poświęcić pewną świeżość pod kątem wydajności, na przykład w przypadku pulpitów nawigacyjnych telemetrii.
Porada
Zapytania dotyczące zmaterializowanej części zawsze działają lepiej niż wykonywanie zapytań względem całego widoku. Zawsze używaj materialized_view()
funkcji, jeśli ma zastosowanie do przypadku użycia.
Zmaterializowane widoki uczestniczą w zapytaniach między klastrami lub między bazami danych, ale nie są uwzględniane w związkach wieloznacznych ani wyszukiwaniach.
- Wszystkie poniższe przykłady obejmują zmaterializowane widoki według nazwy
ViewName
:
cluster('cluster1').database('db').ViewName cluster('cluster1').database('*').ViewName database('*').ViewName database('DB*').ViewName database('*').materialized_view('ViewName') database('DB*').materialized_view('ViewName')
- Następujące przykłady nie obejmują rekordów zmaterializowanych widoków:
cluster('cluster1').database('db').* database('*').View* search in (*) search *
- Wszystkie poniższe przykłady obejmują zmaterializowane widoki według nazwy
Zmaterializowany optymalizator zapytań widoku
Podczas wykonywania zapytań dotyczących całego widoku zmaterializowana część jest połączona z elementem delta
w czasie wykonywania zapytania. Obejmuje to agregowanie delta
i łączenie go ze zmaterializowaną częścią.
- Wykonywanie zapytań względem całego widoku działa lepiej, jeśli zapytanie zawiera filtry w grupie według kluczy zmaterializowanego zapytania widoku. Zobacz więcej wskazówek dotyczących tworzenia zmaterializowanego widoku na podstawie wzorca zapytania w
.create materialized-view
sekcji porady dotyczące wydajności . - Optymalizator zapytań wybiera strategie sumowania/dołączania, które mają poprawić wydajność zapytań. Na przykład decyzja o tym, czy tasować zapytanie, jest oparta na liczbie rekordów po
delta
części. Następujące właściwości żądania klienta zapewniają pewną kontrolę nad zastosowanymi optymalizacjami. Te właściwości można przetestować za pomocą zmaterializowanych zapytań widoku i ocenić ich wpływ na wydajność zapytań.
Nazwa właściwości żądania klienta | Typ | Opis |
---|---|---|
materialized_view_query_optimization_costbased_enabled |
bool |
Jeśli jest ustawiona wartość false , wyłącza optymalizacje sumowania/sprzężenia w zmaterializowanych zapytaniach widoku. Używa strategii domyślnych. Wartość domyślna to true . |
materialized_view_shuffle |
dynamic |
Wymuś mieszanie zmaterializowanego zapytania widoku, a (opcjonalnie) podaj określone klucze do mieszania. Zobacz przykłady poniżej. |
Przykłady
Wykonaj zapytanie dotyczące całego widoku. Najnowsze rekordy w tabeli źródłowej są uwzględniane:
ViewName
Wykonaj zapytanie dotyczące zmaterializowanej części widoku tylko niezależnie od tego, kiedy został on ostatnio zmaterializowany.
materialized_view("ViewName")
Wykonaj zapytanie względem całego widoku i podaj "wskazówkę", aby użyć
shuffle
strategii. Najnowsze rekordy w tabeli źródłowej są uwzględniane:- Przykład nr 1: mieszanie na
Id
podstawie kolumny (podobnie jak przy użyciu poleceniahint.shufflekey=Id
):
set materialized_view_shuffle = dynamic([{"Name" : "ViewName", "Keys" : [ "Id" ] }]); ViewName
- Przykład nr 2: mieszanie na podstawie wszystkich kluczy (podobnie jak przy użyciu polecenia
hint.strategy=shuffle
):
set materialized_view_shuffle = dynamic([{"Name" : "ViewName" }]); ViewName
- Przykład nr 1: mieszanie na
Zagadnienia dotyczące wydajności
Głównymi współautorami, które mogą mieć wpływ na zmaterializowaną kondycję widoku, są:
Zasoby klastra: Podobnie jak każdy inny proces uruchomiony w klastrze, zmaterializowane widoki zużywają zasoby (procesor CPU, pamięć) z klastra. Jeśli klaster jest przeciążony, dodanie zmaterializowanych widoków może spowodować obniżenie wydajności klastra. Monitorowanie kondycji klastra przy użyciu metryk kondycji klastra. Zoptymalizowane autoskalowanie obecnie nie uwzględnia zmaterializowanej kondycji widoków w ramach reguł autoskalowania.
- Proces materializacji jest ograniczony ilością pamięci i procesorem, który może zużywać. Te limity są definiowane i można je zmienić w zmaterializowanej grupie obciążeń widoków.
Nakładanie się na zmaterializowane dane: Podczas materializacji wszystkie nowe rekordy pozyskane do tabeli źródłowej od czasu ostatniej materializacji (różnicy) są przetwarzane i zmaterializowane w widoku. Im większa część między nowymi rekordami a już zmaterializowanymi rekordami, tym gorzej będzie wydajność zmaterializowanego widoku. Zmaterializowany widok działa najlepiej, jeśli liczba rekordów aktualizowanych (na przykład w
arg_max
widoku) jest małym podzbiorem tabeli źródłowej. Jeśli wszystkie lub większość zmaterializowanych rekordów widoku muszą zostać zaktualizowane w każdym cyklu materializacji, zmaterializowany widok może nie działać prawidłowo.Szybkość pozyskiwania: W tabeli źródłowej zmaterializowanego widoku nie ma żadnych zakodowanych limitów ilości danych ani szybkości pozyskiwania. Jednak zalecana szybkość pozyskiwania dla zmaterializowanych widoków wynosi nie więcej niż 1–2 GB/s. Wyższe wskaźniki pozyskiwania mogą nadal działać dobrze. Wydajność zależy od rozmiaru klastra, dostępnych zasobów i ilości skrzyżowania z istniejącymi danymi.
Liczba zmaterializowanych widoków w klastrze: Powyższe zagadnienia dotyczą każdego zmaterializowanego widoku zdefiniowanego w klastrze. Każdy widok używa własnych zasobów, a wiele widoków konkuruje ze sobą nawzajem na dostępnych zasobach. Chociaż w klastrze nie ma ustalonych limitów liczby zmaterializowanych widoków, klaster może nie być w stanie obsłużyć wszystkich zmaterializowanych widoków, jeśli istnieje wiele zdefiniowanych. Zasady pojemności można dostosować, jeśli w klastrze istnieje więcej niż jeden zmaterializowany widok. Zwiększ wartość
ClusterMinimumConcurrentOperations
w zasadach, aby jednocześnie uruchamiać bardziej zmaterializowane widoki.Zmaterializowana definicja widoku: zmaterializowana definicja widoku musi być zdefiniowana zgodnie z najlepszymi rozwiązaniami dotyczącymi zapytań w celu uzyskania najlepszej wydajności zapytań. Aby uzyskać więcej informacji, zobacz tworzenie porad dotyczących wydajności poleceń.
Zmaterializowany widok w zmaterializowanym widoku
Zmaterializowany widok można utworzyć za pośrednictwem innego zmaterializowanego widoku, jeśli zmaterializowany widok źródłowy jest widokiem deduplikacji. W szczególności agregacja zmaterializowanego widoku źródłowego musi być take_any(*)
w celu deduplikacji rekordów źródłowych. Drugi zmaterializowany widok może używać dowolnych obsługiwanych funkcji agregacji. Aby uzyskać szczegółowe informacje na temat tworzenia zmaterializowanego widoku w zmaterializowanym widoku, zobacz .create materialized-view
polecenie .
Porada
Podczas wykonywania zapytań dotyczących zmaterializowanego widoku zdefiniowanego w innym zmaterializowanym widoku zalecamy wykonywanie zapytań dotyczących zmaterializowanej materialized_view()
części tylko przy użyciu funkcji . Wykonywanie zapytań względem całego widoku nie jest wydajne, gdy oba widoki nie są w pełni zmaterializowane. Aby uzyskać więcej informacji, zobacz zmaterializowane zapytania dotyczące widoków.
Zawartość pokrewna
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla