Query Statistics (DMV)
Die „Dynamic Management Views“ vom Microsoft SQL Server 2005 / 2008 bieten zahlreiche Information, wie auch wie häufig SQL Statements ausgeführt wurden.
Das ist interessant, um zu sehen, was am meisten verwendet wird und wo man am ehesten mal über Optimierung nachdenken könnte. Das Ermitteln geht einfach über die DMV sys.dm_exec_query_stats.
Falls das nun ein unerwartetes Ergebnis bringt oder die bisher als „Most Used“ vermuteten SQL Statements fehlen, dann kann es einen einfachen Grund haben: Es werden keine parametrisierte Queries (Commands) verwendet. Dadurch, dass jedes Statement dynamisch mit den Werten generiert wird, sieht für den Sql Server jedes dieser Statements wie ein Uniques aus; somit gibt es jedes Mal ein eigenen Ausführungsplan und somit ist auch nichts mit den Statistiken über mehr als einmal verwendete Statements.
Was sagt uns das: Besser immer parametrisierte Queries verwenden!
Übrigens: Wenn man trotzdem mal ein Ergebnis sehen möchte, dann das Script mal auf der Datenbank „distribution“ (für die Replikation) oder auf der „ReportServer“ (vom Reporting Service) ausführen; sofern vorhanden. Da erhält man auf jeden Fall ein Ergebnis.
-- Anzahl Ausführungen von SQL Statements ermitteln SELECT TOP 100
EQS.execution_count AS Anzahl, EQS.last_execution_time AS LetzteVerwendung, SUBSTRING(EST.text, EQS.statement_start_offset / 2, (CASE WHEN EQS.statement_end_offset = -1
THEN LEN(convert(nvarchar(max), EST.text)) * 2 ELSE EQS.statement_end_offset END - EQS.statement_start_offset) / 2 ) AS QueryText, OBJ.name AS ObjectName, OBJ.type_desc AS ObjectType, PAR.name AS ParentName, PAR.type_desc AS ParentType FROM sys.dm_exec_query_stats AS EQS
CROSS APPLY sys.dm_exec_sql_text(EQS.sql_handle) AS EST INNER JOIN sys.objects AS OBJ ON EST.objectid = OBJ.object_id LEFT JOIN sys.objects AS PAR ON OBJ.parent_object_id = PAR.object_id WHERE EST.dbid = DB_ID()
ORDER BY EQS.execution_count DESC