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!


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


„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.


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


-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)


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.