Słyszałem o tym od przyjaciół, ale nigdy nie badałem, czy to prawda.
Czy to prawda, że wyniki danych wykonanego zapytania są przechowywane w pamięci podręcznej?
Mam na myśli, jeśli mam procedurę składowaną, taką jak:
SELECT * FROM USERLIST
... czy to prawda, że wynik (w tym przypadku lista użytkowników) jest przechowywany w pamięci podręcznej.
Ponadto, jeśli mam te:
SELECT * FROM USERLIST WHERE user="user"
SELECT * FROM USERLIST WHERE user="userzzz"
(w którym użytkownik / userzzz są przekazywane jako parametry), czy poprawne jest przechowywanie 2 różnych wyników w pamięci podręcznej bazy danych.
Nie sądzę, ale chcę od was potwierdzenia, eksperci!
Odpowiedzi:
Wyniki zapytania nie są buforowane
Jednak tabela źródłowa oraz dane indeksu i metadane zostaną zapisane w pamięci podręcznej po pierwszym użyciu (z zastrzeżeniem dalszego używania, obciążenia i obciążenia pamięci)
Oznacza to, że wyniki zapytania będą oceniane przy każdym wykonaniu, ale tabele (i wszelkie indeksy itp.) Używane przez zapytanie najprawdopodobniej będą już w pamięci.
Skompilowany plan wykonania zostanie zapisany w pamięci podręcznej, co, jak podejrzewam, powoduje zamieszanie
źródło
Po wykonaniu procedury składowanej jest ona optymalizowana i kompilowana, a plan zapytań jest umieszczany w pamięci podręcznej procedur.
Procedury pozostają w pamięci podręcznej dla innych użytkowników, o ile jest miejsce. Procedury są usuwane przy użyciu algorytmu ostatnio używanego (LRU).
Podczas gdy początkowe wykonanie procedury przechowywanej wymaga pobrania z procedur sysprocedur na dysku, możliwe jest, aby kolejne wykonania po prostu pobrać zoptymalizowany plan z pamięci podręcznej procedur. Takie zachowanie może prowadzić do znacznego wzrostu wydajności.
Tak więc w pamięci podręcznej znajduje się zoptymalizowany plan z procedury przechowywanej, a nie wyniki procedury przechowywanej.
źródło
Gdy zapytanie jest gotowe do przetworzenia przez SQL Server, SQL Manager sprawdza je
cache
; a jeśli go nie ma, należy go skompilować. Proces kompilacji obejmuje kilka rzeczy.Po wykonaniu procedury składowanej jest ona optymalizowana i kompilowana. zgodnie z tym plan zapytań jest umieszczany w pamięci podręcznej procedur.
Szczegółowe informacje na temat przetwarzania zapytań itp. Znajdują się w
Compilation and Execution
części dotyczącej elementów wewnętrznych i architektury procesora zapytań Microsoft SQL Server .Sprawdź poniższy schemat (z MSDN) wykonywania procedury składowanej, aby wyjaśnić swoje pytanie:
źródło
SQL Server w zasadzie wykonuje następujące kroki, aby wykonać dowolne zapytanie (wywołanie procedury składowanej lub instrukcja SQL ad-hoc):
1) sprawdzaj składniowo zapytanie
2) czy jest w porządku - sprawdza pamięć podręczną planu, aby sprawdzić, czy ma już plan wykonania dla tego zapytania
3) jeśli istnieje plan wykonania - ten plan jest (ponownie) wykorzystywany i zapytanie jest wykonywane
4) jeśli nie ma jeszcze planu, określa się plan wykonania
5) ten plan jest przechowywany w pamięci podręcznej planu do późniejszego ponownego użycia
6) zapytanie jest wykonywane
(kopia odpowiedzi Marc_s)
źródło
Jak powiedzieli inni, wyniki zapytań w SQL Server nie są buforowane.
Jeśli chcesz buforować wyniki zapytania (lub SP), istnieją obejścia. Na przykład zobacz ten artykuł na stronie internetowej Brent Ozar .
źródło