Ich habe eine einfache Abfrage für SQL Server 2005
SELECT *
FROM Table
WHERE Col = 'someval'
Das erste Mal, wenn ich die Abfrage ausführe, kann dauern > 15 secs
. Nachfolgende Ausführungen sind wieder in < 1 sec
.
Wie kann ich SQL Server 2005 dazu bringen, keine zwischengespeicherten Ergebnisse zu verwenden? Ich habe versucht zu rennen
DBCC DROPCLEANBUFFERS
DBCC FREEPROCCACHE
Dies scheint jedoch (noch < 1 sec
) keinen Einfluss auf die Abfragegeschwindigkeit zu haben .
sql-server
caching
PaulB
quelle
quelle
Antworten:
Hier ist eine gute Erklärung. Schau es dir an.
http://www.mssqltips.com/tip.asp?tip=1360
Aus dem verlinkten Artikel:
quelle
Acht verschiedene Möglichkeiten, den Plan-Cache zu leeren
1. Entfernen Sie alle Elemente für die gesamte Instanz aus dem Plan-Cache
Verwenden Sie diese Option, um den Plan-Cache sorgfältig zu löschen. Durch das Freigeben des Plan-Cache wird beispielsweise eine gespeicherte Prozedur neu kompiliert, anstatt aus dem Cache wiederverwendet zu werden. Dies kann zu einer plötzlichen, vorübergehenden Verringerung der Abfrageleistung führen.
2. Leeren Sie den Plan-Cache für die gesamte Instanz und unterdrücken Sie die reguläre Abschlussmeldung
"DBCC-Ausführung abgeschlossen. Wenn DBCC Fehlermeldungen gedruckt hat, wenden Sie sich an Ihren Systemadministrator."
3. Leeren Sie den Ad-hoc- und vorbereiteten Plan-Cache für die gesamte Instanz
4. Leeren Sie den Ad-hoc- und vorbereiteten Plan-Cache für einen Ressourcenpool
5. Leeren Sie den gesamten Plan-Cache für einen Ressourcenpool
6. Entfernen Sie alle Elemente für eine Datenbank aus dem Plan-Cache (funktioniert in SQL Azure nicht).
7. Löschen Sie den Plan-Cache für die aktuelle Datenbank
8. Entfernen Sie einen Abfrageplan aus dem Cache
Quelle 1 2 3
quelle
Obwohl die Frage nur ein bisschen alt ist, könnte dies dennoch helfen. Ich habe ähnliche Probleme und die Verwendung der folgenden Option hat mir geholfen. Ich bin mir nicht sicher, ob dies eine dauerhafte Lösung ist, aber sie behebt sie vorerst.
Dann wird Ihre Anfrage so sein
quelle
select * from Table where Col = 'someval' OPTION (OPTIMIZE FOR UNKNOWN)
Welchen Wert Sie für den Serverspeicher angeben, ist nicht wichtig, solange er sich vom aktuellen unterscheidet.
Übrigens ist das, was die Beschleunigung verursacht, nicht der Abfrage-Cache, sondern der Daten-Cache.
quelle
Beachten Sie, dass in SQL Azure / SQL Data Warehouse weder
DBCC DROPCLEANBUFFERS;
nochDBCC FREEPROCCACHE;
unterstützt wird.Wenn Sie jedoch den Plan-Cache in SQL Azure zurücksetzen müssen, können Sie eine der Tabellen in der Abfrage ändern (z. B. einfach eine Spalte hinzufügen und dann entfernen). Dies hat den Nebeneffekt, dass der Plan aus dem Cache entfernt wird .
Ich persönlich mache dies, um die Abfrageleistung zu testen, ohne mich mit zwischengespeicherten Plänen befassen zu müssen.
Weitere Informationen zum SQL Azure-Prozedurcache finden Sie hier
quelle