SSMS
 sql >> Datenbank >  >> Database Tools >> SSMS

Abfrageausführungszeit in Management Studio &Profiler. Was misst es?

Wenn ich Ihre Frage richtig verstehe, stellen Sie zunächst den Unterschied zwischen der vom Profiler gemeldeten Dauer und den in SSMS angezeigten Statistiken in Frage (entweder in der unteren rechten Ecke für die allgemeine Zeit und/oder durch SET STATISTICS TIME ON). Darüber hinaus scheinen Sie von dem Kommentar des Produktions-DBA, dass die Ansicht in der erwarteten Dauer von ~60 Sekunden ausgeführt wird, nicht überzeugt zu sein.

Zunächst die Statistik aus Books Online, die SSMS über SET STATISTICS TIME ON:

zurückmelden würde

"Zeigt die Anzahl der Millisekunden an, die erforderlich sind, um jede Anweisung zu parsen, zu kompilieren und auszuführen."

Dafür liegen Sie goldrichtig. Die Dauer im Profiler wird wie folgt beschrieben:

"Die Dauer (in Mikrosekunden) des Ereignisses."

Aus meiner Sicht sollten diese beiden funktional gleichwertig sein (und wie Sie sicher bemerkt haben, meldet Profiler in Mikrosekunden, wenn Sie gegen SQL 2005 oder höher vorgehen). Ich sage das, weil das „Ereignis“ in diesem Fall (in Bezug auf die Dauer im Profiler) die Ausführung der Auswahl ist, die die Lieferung an den Client umfasst; dies ist in beiden Fällen konsistent.

Anscheinend vermuten Sie, dass die geografische Lage der Schuldige für die lange Dauer ist, wenn die Abfrage remote ausgeführt wird. Das kann sehr gut sein. Sie können dies testen, indem Sie in einem Abfragefenster die Auswahl für die Ansicht ausführen, dann ein weiteres Abfragefenster erzeugen und den Wartetyp für die Abfrage überprüfen:

select
    a.session_id
    ,a.start_time
    ,a.status
    ,a.command
    ,db_name(a.database_id) as database_name
    ,a.blocking_session_id
    ,a.wait_type
    ,a.wait_time
    ,a.cpu_time
    ,a.total_elapsed_time
    ,b.text
from sys.dm_exec_requests a
    cross apply sys.dm_exec_sql_text(a.sql_handle) b
where a.session_id != @@spid;

Ich würde vermuten, dass Sie so etwas wie ASYNC_NETWORK_IO als Wartetyp sehen würden, wenn die Geographie das Problem ist - ansonsten sehen Sie sich an, was daraus wird. Wenn Sie die Abfrage Ihrer Remote-Ausführung profilieren, spiegelt die Dauer die Zeitstatistik wider, die Sie in SSMS sehen. JEDOCH, wenn Sie Profiler verwenden und feststellen, dass die Dauer dieser Abfrage wenn sie von einem der Webserver ausgeführt wird das im selben Rechenzentrum sitzt wie der SQL Server dauert immer noch 7 Minuten, dann ist der DBA ein großer, fetter Lügner :). Ich würde Profiler verwenden, um Abfragen aufzuzeichnen, die länger als 1 Minute dauern, versuchen, nach Ihrer Ansicht zu filtern und den Durchschnitt zu nehmen, um zu sehen, ob Sie das Leistungsziel erreichen.

Da keine anderen Antworten gepostet wurden, mache ich mir Sorgen, dass ich hier weit von der Basis liege - aber es ist spät und ich bin neu in diesem Thema, also dachte ich, ich versuche es mal!