Dostrajanie wydajności za pomocą buforowania zestawu wyników

Gdy buforowanie zestawu wyników jest włączone, dedykowana pula SQL automatycznie buforuje wyniki zapytania w bazie danych użytkownika w celu powtarzalnego użycia. Dzięki temu kolejne wykonania zapytań mogą uzyskiwać wyniki bezpośrednio z utrwalonej pamięci podręcznej, więc ponowne obliczanie nie jest potrzebne. Buforowanie zestawu wyników zwiększa wydajność zapytań i zmniejsza użycie zasobów obliczeniowych. Ponadto zapytania korzystające z buforowanego zestawu wyników nie używają żadnych gniazd współbieżności, a tym samym nie są liczone względem istniejących limitów współbieżności. W przypadku zabezpieczeń użytkownicy mogą uzyskiwać dostęp tylko do buforowanych wyników, jeśli mają te same uprawnienia dostępu do danych co użytkownicy tworzący buforowane wyniki. Buforowanie zestawu wyników jest domyślnie wyłączone na poziomach bazy danych i sesji.

Uwaga / Notatka

Buforowanie zbioru wyników nie powinno być używane w połączeniu z DECRYPTBYKEY. Jeśli ta funkcja kryptograficzna musi być używana, upewnij się, że buforowanie zestawu wyników jest wyłączone (na poziomie sesji lub na poziomie bazy danych) w czasie wykonywania.

Kluczowe polecenia

Włączanie/wyłączanie buforowania zestawu wyników dla bazy danych użytkownika

Włączanie/wyłączanie buforowania zestawu wyników dla sesji

Sprawdzanie rozmiaru buforowanego zestawu wyników

Czyszczenie pamięci podręcznej

Co nie jest buforowane

Po włączeniu buforowania zestawu wyników dla bazy danych wyniki są buforowane dla wszystkich zapytań do momentu zapełnienia pamięci podręcznej, z wyjątkiem tych zapytań:

  • Zapytania z wbudowanymi funkcjami lub wyrażeniami środowiska uruchomieniowego, które nie są deterministyczne, nawet jeśli nie ma żadnych zmian w danych lub zapytaniu w tabelach bazowych. Na przykład DateTime.Now(), GetDate().
  • Zapytania korzystające z funkcji zdefiniowanych przez użytkownika
  • Zapytania korzystające z tabel z zabezpieczeniami na poziomie wiersza
  • Zapytania zwracające dane o rozmiarze wiersza większym niż 64 KB
  • Zapytania zwracające duże dane o rozmiarze (>10 GB)

Uwaga / Notatka

  • Niektóre funkcje niedeterministyczne i wyrażenia środowiska uruchomieniowego mogą być deterministyczne dla powtarzających się zapytań względem tych samych danych. Na przykład ROW_NUMBER().
  • Użyj funkcji ORDER BY w zapytaniu, jeśli kolejność/sekwencja wierszy w zestawie wyników zapytania jest ważna dla logiki aplikacji.
  • Jeśli dane w kolumnach ORDER BY nie są unikatowe, nie ma gwarantowanej kolejności wierszy dla wierszy z tymi samymi wartościami w kolumnach ORDER BY, niezależnie od tego, czy buforowanie zestawu wyników jest włączone lub wyłączone.

Ważna

Operacje tworzenia pamięci podręcznej dla zestawu wyników oraz pobierania danych z tej pamięci odbywają się na węźle kontrolnym dedykowanego wystąpienia puli SQL. Gdy buforowanie zestawu wyników jest włączone, uruchamianie zapytań, które zwracają duży zestaw wyników (na przykład >1 GB), może spowodować duże ograniczenie przepustowości w węźle sterowania i spowolnić ogólną odpowiedź zapytania w wystąpieniu. Te zapytania są często używane podczas eksploracji danych lub operacji ETL. Aby uniknąć przeciążenia węzła sterowania i spowodować problem z wydajnością, użytkownicy powinni wyłączyć buforowanie zestawu wyników w bazie danych przed uruchomieniem tych typów zapytań.

Uruchom to zapytanie, aby uzyskać czas potrzebny na operacje buforowania zestawu wyników dla zapytania:

SELECT step_index, operation_type, location_type, status, total_elapsed_time, command
FROM sys.dm_pdw_request_steps
WHERE request_id  = <'request_id'>;

Oto przykładowe dane wyjściowe zapytania wykonanego z wyłączoną buforowaniem zestawu wyników.

Zrzut ekranu przedstawiający wyniki zapytania, w tym typ lokalizacji i polecenie.

Oto przykładowe dane wyjściowe zapytania wykonanego z włączonym buforowaniem zestawu wyników.

Zrzut ekranu przedstawiający wyniki zapytania z wybranym poleceniem * z [D W ResultCache D b] dot d b o wywoływanych.

Gdy są używane buforowane wyniki

Zestaw wyników buforowanych jest ponownie używany dla zapytania, jeśli spełnione są wszystkie następujące wymagania:

  • Użytkownik, który uruchamia zapytanie, ma dostęp do wszystkich tabel, do których odwołuje się zapytanie.
  • Istnieje dokładne dopasowanie między nowym zapytaniem a poprzednim zapytaniem, które wygenerowało pamięć podręczną zestawu wyników.
  • W tabelach, na których wygenerowano buforowany zestaw wyników, nie ma żadnych zmian danych ani schematów.

Uruchom tę komendę, aby sprawdzić, czy zapytanie zostało wykonane z trafieniem lub chybieniem pamięci podręcznej wyników. Kolumna result_cache_hit zwraca wartość 1 dla trafienia w pamięć podręczną, 0 w przypadku braku trafienia i wartości ujemnych z powodów, dla których buforowanie zestawu wyników nie zostało użyte. Sprawdź sys.dm_pdw_exec_requests w celu uzyskania szczegółowych informacji.

SELECT request_id, command, result_cache_hit FROM sys.dm_pdw_exec_requests
WHERE request_id = <'Your_Query_Request_ID'>

Zarządzanie buforowanymi wynikami

Maksymalny rozmiar pamięci podręcznej zestawu wyników wynosi 1 TB na bazę danych. Buforowane wyniki są automatycznie unieważniane po zmianie danych zapytania bazowego.

Usuwanie pamięci podręcznej jest zarządzane automatycznie przez dedykowaną pulę SQL zgodnie z tym harmonogramem.

  • Co 48 godzin, jeśli zestaw wyników nie został użyty lub został unieważniony.
  • Gdy pamięć podręczna zestawu wyników zbliża się do maksymalnego rozmiaru.

Użytkownicy mogą ręcznie opróżnić całą pamięć podręczną zestawu wyników przy użyciu jednej z następujących opcji:

  • Wyłącz pamięć podręczną zestawu wyników dla bazy danych
  • Uruchom polecenie DBCC DROPRESULTSETCACHE podczas nawiązywania połączenia z bazą danych

Wstrzymanie bazy danych nie spowoduje opróżnienia buforowanego zestawu wyników.

Następne kroki

Aby uzyskać więcej porad dotyczących programowania, zobacz Omówienie programowania.