Udostępnij za pośrednictwem


Inteligentna pamięć podręczna w usłudze Microsoft Fabric

Funkcja inteligentnej pamięci podręcznej działa bezproblemowo w tle i buforuje dane, aby przyspieszyć wykonywanie zadań platformy Apache Spark w usłudze Microsoft Fabric podczas odczytywania z magazynu Usługi OneLake lub Azure Data Lake Storage (ADLS) Gen2 za pomocą skrótów. Automatycznie wykrywa również zmiany w plikach bazowych i automatycznie odświeża pliki w pamięci podręcznej, zapewniając najnowsze dane. Gdy rozmiar pamięci podręcznej osiągnie limit, pamięć podręczna automatycznie zwalnia najmniejszą ilość danych odczytu, aby zwolnić miejsce na najnowsze dane. Ta funkcja obniża całkowity koszt posiadania, zwiększając wydajność do 60% kolejnych odczytów plików przechowywanych w dostępnej pamięci podręcznej.

Gdy aparat Apache Spark w usłudze Microsoft Fabric wysyła zapytanie do pliku lub tabeli z usługi Lakehouse, wykonuje wywołanie magazynu zdalnego w celu odczytania źródłowych plików. Przy każdym żądaniu zapytania odczytu tych samych danych aparat Spark musi wykonać wywołanie magazynu zdalnego za każdym razem. Ten nadmiarowy proces dodaje opóźnienie do łącznego czasu przetwarzania. Platforma Spark ma wymaganie buforowania, które należy ręcznie ustawić i zwolnić pamięć podręczną, aby zminimalizować opóźnienia i poprawić ogólną wydajność. Jednak to wymaganie może spowodować nieaktualne dane, jeśli bazowe dane się zmienią.

Inteligentna pamięć podręczna upraszcza proces przez automatyczne buforowanie każdego odczytu w przydzielonej pamięci podręcznej miejsca do magazynowania w każdym węźle Spark, w którym pliki danych są buforowane na dysku SSD. Każde żądanie dla pliku sprawdza, czy plik istnieje w lokalnej pamięci podręcznej węzłów i porównaj tag z magazynu zdalnego, aby ustalić, czy plik jest nieaktualny. Jeśli plik nie istnieje lub jeśli plik jest nieaktualny, platforma Spark odczytuje plik i zapisze go w pamięci podręcznej. Gdy pamięć podręczna stanie się pełna, plik z najstarszym ostatnim czasem dostępu zostanie wykluczony z pamięci podręcznej, aby umożliwić korzystanie z nowszych plików.

Inteligentna pamięć podręczna to pojedyncza pamięć podręczna na węzeł. Jeśli używasz węzła o średniej wielkości i uruchamiasz z dwoma małymi funkcjami wykonawczych w tym jednym węźle, te dwie funkcje wykonawcze współdzielą tę samą pamięć podręczną. Ponadto buforowanie na poziomie pliku danych umożliwia korzystanie z tej samej pamięci podręcznej przez wiele zapytań, jeśli uzyskują dostęp do tych samych danych lub plików danych.

Jak działa

W usłudze Microsoft Fabric (środowisko uruchomieniowe 1.1 i 1.2) inteligentne buforowanie jest domyślnie włączone dla wszystkich pul platformy Spark dla wszystkich obszarów roboczych o rozmiarze pamięci podręcznej o rozmiarze 50%. Rzeczywisty rozmiar dostępnego magazynu i rozmiar pamięci podręcznej dla każdego węzła zależy od rodziny węzłów i rozmiaru węzła.

Kiedy należy używać inteligentnej pamięci podręcznej

Ta funkcja zapewnia następujące korzyści:

  • Obciążenie wymaga wielokrotnego odczytywania tego samego pliku, a rozmiar pliku mieści się w pamięci podręcznej.

  • Obciążenie używa tabel usługi Delta Lake, formatów plików Parquet lub CSV.

Nie widzisz korzyści z inteligentnej pamięci podręcznej, jeśli:

  • Odczytujesz plik, który przekracza rozmiar pamięci podręcznej. Jeśli tak, początek plików może zostać wykluczony, a kolejne zapytania muszą ponownie pobrać dane z magazynu zdalnego. W takim przypadku nie widzisz żadnych korzyści z inteligentnej pamięci podręcznej i możesz zwiększyć rozmiar pamięci podręcznej i/lub rozmiar węzła.

  • Obciążenie wymaga dużych ilości mieszania. Wyłączenie inteligentnej pamięci podręcznej zwalnia dostępne miejsce, aby zapobiec awarii zadania z powodu niewystarczającej ilości miejsca do magazynowania.

Włączanie i wyłączanie inteligentnej pamięci podręcznej

Możesz wyłączyć lub włączyć inteligentną pamięć podręczną w ramach sesji, uruchamiając następujący kod w notesie lub ustawiając tę konfigurację na poziomie obszaru roboczego lub elementu środowiska .

spark.conf.set("spark.synapse.vegas.useCache", "false/true")