Ich möchte herausfinden, was die hohen SQL-Kompilierungen (keine Neukompilierungen) verursacht, die ich in Leistungsüberwachungszählern sehe.
Hier ist meine Meinung dazu: Wenn ich viele SQl-Kompilierungen sehe, bedeutet dies, dass die Abfragen auf unserem System aus folgenden Gründen nicht zwischengespeichert werden:
- Viele Ad-hoc-Anfragen
Ausführen von Abfragen, die von SQl nicht zwischengespeichert werden, z.
UPDATE table1 SET col1 = 'Zeichenfolge länger als 8000 Zeichen .....' WHERE key_column = some int
Pläne laufen ab und werden aus dem Cache entfernt, weil: Der Cache nicht genügend Speicherplatz hat oder Pläne nicht lange genug verwendet werden.
Das einzige, was der Erfassung von Cache-Einfügungen im Profiler nahe kommt, ist Gespeicherte Prozeduren-> SP: CacheInserts, aber es kümmert sich nur um den Cache für gespeicherte Prozeduren.
Also habe ich Folgendes versucht, um Ad-hoc-Anfragen zu erhalten:
SELECT [cp].[refcounts] -- when Refcounts becomes 0, plan is excluded from cache.
, [cp].[usecounts]
, [cp].[objtype]
, st.[dbid]
, st.[objectid]
, st.[text]
, [qp].[query_plan]
FROM sys.dm_exec_cached_plans cp
CROSS APPLY sys.dm_exec_sql_text ( cp.plan_handle ) st
CROSS APPLY sys.dm_exec_query_plan ( cp.plan_handle ) qp ;
Ich dachte, Abfragen, die die Kompilierungen verursacht haben, sollten solche mit objtype = Adhoc sein, aber dies könnte sich auch auf Neukompilierungen beziehen. Jetzt muss ich den Profiler ausführen, Abfragen erfassen, die zu Neukompilierungen führen, und ihn dann aus der obigen Liste entfernen.
Gehe ich in die richtige richtung
Gibt es eine einzige Abfrage, mit der ich nur SQL-Kompilierungen ohne zu viel Arbeit erstellen kann?
Ressourcen, die mir geholfen haben, das oben genannte Wissen zu erlangen:
http://social.msdn.microsoft.com/Forums/en/sqldatabaseengine/thread/954b4fba-3774-42e3-86e7-e5172abe0c83
http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=143946
http: //technet.microsoft.com/en-nz/library/cc966425(en-us).aspx
http://www.sqlservercentral.com/Forums/Topic914951-360-1.aspx
Jede Hilfe wird sehr geschätzt.