Zwischenspeichern gespeicherte SQL Server-Prozeduren Datenergebnisse?

11

Ich habe das von Freunden gehört, aber ich habe nie untersucht, ob dies wahr ist.

Stimmt es, dass die Datenergebnisse einer ausgeführten Abfrage im Cache gespeichert werden?

Ich meine, wenn ich eine gespeicherte Prozedur habe wie:

SELECT * FROM USERLIST

... ist es wahr, dass das Ergebnis (in diesem Fall die Liste der Benutzer) im Cache gespeichert ist.

Auch wenn ich diese habe:

SELECT * FROM USERLIST WHERE user="user"
SELECT * FROM USERLIST WHERE user="userzzz"

(in dem user / userzzz als Parameter übergeben werden), ist es richtig, dass 2 verschiedene Ergebnisse im Datenbankcache gespeichert werden.

Ich glaube nicht, aber ich möchte die Bestätigung von Ihnen, Experten!


quelle
Ich habe

Antworten:

19

Abfrageergebnisse werden nicht zwischengespeichert

Die Quellentabellen- und Indexdaten sowie die Metadaten werden jedoch nach der ersten Verwendung zwischengespeichert (vorbehaltlich fortgesetzter Verwendung, Laden und Speicherdruck).

Das heißt, die Ergebnisse einer Abfrage werden bei jeder Ausführung ausgewertet, aber die von der Abfrage verwendeten Tabellen (und alle Indizes usw.) befinden sich höchstwahrscheinlich bereits im Speicher.

Der kompilierte Ausführungsplan wird zwischengespeichert, woher die Verwirrung kommt, wie ich vermute

gbn
quelle
"Das heißt, die Ergebnisse einer Abfrage werden bei jeder Ausführung ausgewertet, aber die von der Abfrage verwendeten Tabellen (und Indizes usw.) befinden sich höchstwahrscheinlich bereits im Speicher." : Ja, auch ich benutze kein SP, denke ich ... das ist eine Datenbankoptimierung, die bei Sp keine Rolle spielt, oder?
@markzzz: Fast alle SQL wird zu einem Ausführungsplan kompiliert, ob ein direktes UPDATE, SELECT oder eine gespeicherte Prozedur
gbn
6

Wenn eine gespeicherte Prozedur ausgeführt wird, wird sie optimiert und kompiliert, und der Abfrageplan wird im Prozedurcache abgelegt.

Prozeduren bleiben für andere Benutzer im Cache, solange Speicherplatz vorhanden ist. Prozeduren werden mit dem zuletzt verwendeten Algorithmus (LRU) entfernt.


Während die anfängliche Ausführung einer gespeicherten Prozedur das Abrufen von Systemprozeduren auf der Festplatte erfordert, ist es für nachfolgende Ausführungen möglich, den optimierten Plan einfach aus dem Prozedurcache abzurufen. Dieses Verhalten kann zu einem erheblichen Leistungsgewinn führen.

Im Cache befindet sich also der optimierte Plan der gespeicherten Prozedur und nicht die Ergebnisse der gespeicherten Prozedur.

aF.
quelle
6

Wenn eine Abfrage bereit ist, von SQL Server verarbeitet zu werden, sucht der SQL Manager in cache. und wenn es nicht da ist, muss es kompiliert werden. Der Kompilierungsprozess umfasst einige Dinge.

Wenn eine gespeicherte Prozedur ausgeführt wird, wird sie optimiert und kompiliert. danach wird ein Abfrageplan in den Prozedurcache gestellt.

Ausführliche Informationen zur Abfrageverarbeitung usw. finden Sie im Compilation and ExecutionAbschnitt Interna und Architektur des Microsoft SQL Server- Abfrageprozessors.

Das Endprodukt der Kompilierungsphase ist ein Abfrageplan, der in den Prozedurcache gestellt wird. Das Ergebnis / die Operation der SQL-Abfrage kann eine Größe in MB oder GB haben, sodass sie nicht in den Prozedurcache oder den Abfrageplan gestellt wird.

Überprüfen Sie das folgende Diagramm (von MSDN) für die Ausführung gespeicherter Prozeduren, um Ihre Frage zu klären: Geben Sie hier die Bildbeschreibung ein

Niranjan Singh
quelle
-1

SQL Server führt im Wesentlichen die folgenden Schritte aus, um eine Abfrage auszuführen (Aufruf einer gespeicherten Prozedur oder Ad-hoc-SQL-Anweisung):

1) Überprüfen Sie die Abfrage syntaktisch.
2) Wenn sie in Ordnung ist, überprüft sie den Plan-Cache, um festzustellen, ob bereits ein Ausführungsplan für diese Abfrage vorhanden ist.
3) Wenn ein Ausführungsplan vorhanden ist, wird dieser Plan (erneut) verwendet und die Abfrage ausgeführt
4) Wenn noch kein Plan vorhanden ist, wird ein Ausführungsplan ermittelt.
5) Dieser Plan wird zur späteren Wiederverwendung im Plan-Cache gespeichert.
6) Die Abfrage wird ausgeführt

(Kopie von Marc_s Antwort)

Nighil
quelle
-1

Wie bereits erwähnt, werden Abfrageergebnisse in SQL Server nicht zwischengespeichert.

Wenn Sie die Ergebnisse einer Abfrage (oder eines SP) zwischenspeichern möchten , gibt es Problemumgehungen. Lesen Sie zum Beispiel diesen Artikel auf der Brent Ozar-Website .

pedrofernandes
quelle