Strojenie 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 kompozycje nie są 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
Buforowanie zestawu wyników nie powinno być używane w połączeniu z kluczem 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.
Polecenia klucza
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 następujących zapytań:
- Zapytania z wbudowanymi funkcjami lub wyrażeniami środowiska uruchomieniowego, które nie są deterministyczne, nawet jeśli nie ma żadnych zmian w danych ani zapytaniach 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
- Niektóre funkcje niedeterministyczne i wyrażenia środowiska uruchomieniowego mogą być deterministyczne do powtarzających się zapytań względem tych samych danych. Na przykład ROW_NUMBER().
- Użyj wartości 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 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żne
Operacje tworzenia pamięci podręcznej zestawu wyników i pobierania danych z pamięci podręcznej odbywają się w 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ź na zapytanie 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łączonym 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 wszystkie następujące wymagania zostały spełnione:
- 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 schematu.
Uruchom to polecenie, aby sprawdzić, czy zapytanie zostało wykonane z trafieniem lub pominięciem pamięci podręcznej wyników. Kolumna result_cache_hit zwraca wartość 1 dla trafienia pamięci podręcznej, 0 dla błędu pamięci podręcznej i wartości ujemne z powodów, dla których buforowanie zestawu wyników nie było używane. Sprawdź sys.dm_pdw_exec_requests , aby uzyskać szczegółowe informacje.
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.
Eksmisja pamięci podręcznej jest zarządzana przez dedykowaną pulę SQL automatycznie 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łączanie funkcji pamięci podręcznej 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.