2016-04-04 5 views
0

Gibt es eine Möglichkeit zum Abrufen der Informationen über die durchschnittliche Zeit (oder besser eine Verteilung) einfügen Zeit in eine bestimmte Tabelle in SQL Server bis zum aktuellen Zeitpunkt?Durchschnittliche Einfügezeit für eine Tabelle in SQL Server historisch

z.B. Das Einfügen in "Mitarbeiter" dauerte durchschnittlich 1 Millisekunde pro Datensatz.

Ich spreche hier über historische Daten z. im Laufe des letzten Jahres, nicht was ich für spezifische Abfragen beim Profiling bekommen kann.

+0

run sql Profiler – Gabor

+1

Sie haben die [dynamische Management Ansichten und Funktionen] (https://msdn.microsoft.com/en-us/library/ms188754.aspx). Die meisten der hier erfassten Statistiken gehen jedoch jedes Mal verloren, wenn der SQL Server neu gestartet wird. Soweit ich weiß, protokolliert SQL Server dieses Zeug nicht aus der Box. Wenn Sie nur nachdenken, haben Sie vielleicht mehr Glück, wenn Sie diese Frage an [Stack DBA] (http://dba.stackexchange.com/) weiterleiten. –

Antwort

0

SQL Profiler ist nicht korrekt, auch wird es markiert SQL-Daten 2012.

besten Tools für caturing erfolgsabhängige deprecated Start ist verlängert Ereignisse oder perfmon. Denken Sie nicht, dass perfmon Ihnen Leistung auf Objektebene geben wird, aber es wird Ihnen sagen, wenn Sie Engpässe auf IO-Ebene haben. Sie müssen diese Tools/Funktionen für die Datenerfassung aktivieren. Wenn sie nicht bereits aktiviert wurde, ist das Abrufen von Protokolldaten wahrscheinlich nicht möglich.

1

Sie sollten auch Plancache überprüfen. Von dort aus können Sie die durchschnittliche Dauer pro Anweisung berechnen, und wenn Sie nicht mit vielen verschiedenen Anweisungen in die Tabelle einfügen (und Ihre Abfragen sind parametrisiert), sollten Sie ziemlich gute Ergebnisse erzielen.

Hier ist ein Beispiel, wie die DMVs abfragen:

select top 100 
SUBSTRING(t.text, (s.statement_start_offset/2)+1, 
    ((CASE s.statement_end_offset 
    WHEN -1 THEN DATALENGTH(t.text) 
    ELSE s.statement_end_offset 
    END - s.statement_start_offset)/2) + 1) as statement_text, 
t.text, 
s.total_logical_reads, s.total_logical_reads/s.execution_count as avg_logical_reads, 
s.total_worker_time, s.total_worker_time/s.execution_count as avg_worker_time, 
s.execution_count, 
creation_time, 
last_execution_time 
--,cast(p.query_plan as xml) as query_plan 
from sys.dm_exec_query_stats s 
cross apply sys.dm_exec_sql_text (sql_handle) t 
--cross apply sys.dm_exec_text_query_plan (plan_handle, statement_start_offset, statement_end_offset) p 
order by s.execution_count desc 

Der Teil für Abfragepläne ist als Kommentar gekennzeichnet.

+0

das funktioniert, bis der SQL Server-Dienst recycelt wird. Wie der Benutzer sagte, möchte ein Jahr zurückgehen. – Greg

+0

Ja, das zeigt sich definitiv nur, bis der Plan im Cache ist, was bedeutet, dass er jederzeit gelöscht werden kann, wenn er nicht benutzt wird (oder mehr Cache für andere benötigt wird) –

Verwandte Themen