Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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.
Oto przykładowe dane wyjściowe zapytania wykonanego z włączonym buforowaniem zestawu wyników.
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.