Manchmal bei der Diagnose von Problemen mit unserer SQL Server 2000-Datenbank kann es hilfreich sein, zu wissen, dass eine gespeicherte Prozedur einen schlechten Plan verwendet oder Schwierigkeiten hat, zu dem Zeitpunkt, an dem Probleme auftreten, einen guten Plan zu erstellen. Ich frage mich, ob es eine Abfrage oder einen Befehl gibt, den ich ausführen kann, um mir zu sagen, wie viele Ausführungspläne derzeit für eine bestimmte gespeicherte Prozedur zwischengespeichert werden.SQL Server 2000: Wie kann ich feststellen, wie viele Pläne eine gespeicherte Prozedur zwischengespeichert hat?
1
A
Antwort
3
Sie können den Cache auf verschiedene Arten abfragen, indem Sie sich entweder den Inhalt anschauen oder einige verwandte Statistiken betrachten.
Ein paar Befehle, die Sie auf Ihrem Weg helfen:
SELECT * FROM syscacheobjects -- shows the contents of the procedure
-- cache for all databases
DBCC PROCCACHE -- shows some general cache statistics
DBCC CACHESTATS -- shows the usage statistics for the cache, things like hit ratio
Wenn Sie den Cache für nur eine Datenbank löschen müssen, können Sie verwenden:
DBCC FLUSHPROCINDB (@dbid) -- that's an int, not the name of it.
-- The int you'd get from sysdatabases or the dbid() function
Edit: über der Linie ist für 2000, was die Frage gestellt hat. Doch für alle Besucher, die SQL Server 2005 ist verwenden, ist es eine etwas andere Anordnung zum oben Erwähnten:
select * from sys.dm_exec_cached_plans -- shows the basic cache stuff
Eine nützliche Abfrage für Pläne zeigt im Jahr 2005:
SELECT cacheobjtype, objtype, usecounts, refcounts, text
from sys.dm_exec_cached_plans p
join sys.dm_exec_query_stats s on p.plan_handle = s.plan_handle
cross apply sys.dm_exec_sql_text(s.sql_handle)
Wie kann ich herausfinden, wie Viele Pläne existieren derzeit für eine gespeicherte Prozedur? – Jon
SELECT objType, sql, * aus syscacheobjects wo sql like 'yourproc%' –
Danke. Es gibt so viele Spalten, die ich auf den ersten Blick nicht so offensichtlich gesehen habe. – Jon