Czy SQL Server procedury składowane buforują wyniki danych?

11

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!


źródło
właśnie odpowiedział mi teraz przez marc_s stackoverflow.com/questions/8559443/…

Odpowiedzi:

19

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

gbn
źródło
„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.” : tak, ja też nie używam SP Chyba ... to jest optymalizacja bazy danych, to nie ma znaczenia w Sp, prawda?
@markzzz: prawie cały SQL jest skompilowany zgodnie z planem wykonania, zarówno bezpośrednią AKTUALIZACJĄ,
WYBIERANIEM
6

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.

aF.
źródło
6

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 Executionczęści dotyczącej elementów wewnętrznych i architektury procesora zapytań Microsoft SQL Server .

Produktem końcowym fazy kompilacji jest plan zapytań, który jest umieszczany w pamięci podręcznej procedur. Wynik / operacja zapytania SQL może mieć rozmiar w MB, GB, więc nie jest umieszczany w pamięci podręcznej procedury ani w planie zapytań.

Sprawdź poniższy schemat (z MSDN) wykonywania procedury składowanej, aby wyjaśnić swoje pytanie: wprowadź opis zdjęcia tutaj

Niranjan Singh
źródło
-1

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)

Noc
źródło