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!
Antworten:
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
quelle
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.
quelle
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 Execution
Abschnitt Interna und Architektur des Microsoft SQL Server- Abfrageprozessors.Überprüfen Sie das folgende Diagramm (von MSDN) für die Ausführung gespeicherter Prozeduren, um Ihre Frage zu klären:
quelle
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)
quelle
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 .
quelle