Finden Sie heraus, welche Abfragen den größten Datenverkehr im Netzwerk verursachen


23

Auf einem Produktions-SQL-Server sehe ich zeitweise enorme Spitzen im Datenverkehr. Bis zu 200 Mbit / s, wodurch NETWORK IO wartet, was wiederum zu Zeitüberschreitungen bei der Abfrage führt. Wie kann ich herausfinden, welche Abfragen große Ergebnismengen zurückgeben?

Antworten:


18

Sie finden dies in den DMVs :

SELECT session_id, num_writes, st.text AS statement_text
FROM sys.dm_exec_connections AS ec
CROSS APPLY sys.dm_exec_sql_text(ec.most_recent_sql_handle) AS st
ORDER BY num_writes DESC

Im Gegensatz zur Ablaufverfolgung sollte dies auf einem Produktionsserver absolut sicher sein.


7

Ich würde mit SQL Profiler eine Verfolgung der Produktionsdaten durchführen und den Code / die Stapel mit den meisten Lese- und Schreibvorgängen erfassen. Filtern Sie die Ablaufverfolgung, um nur Prozeduren und Stapel mit hohem Lese- / Schreibvolumen abzurufen. Wählen Sie eine Probe, die zu Ihrem Auge passt: Sagen wir, mehr als 1 Million Lese- oder Schreibvorgänge.

Ich würde ein Beispiel dieser Aufrufe an einen Entwickler- / Testcomputer senden und sie in Management Studio mit aktivierter Option "Client-Statistiken einbeziehen" ausführen (im Menü Abfrage - Client-Statistiken einbeziehen). Dann wird ein separates Fenster mit Client-Statistikinformationen angezeigt: Vom Client gesendete Bytes, Vom Server empfangene Bytes.

VERFOLGUNG AUF EINER PRODUKTIONS-DB NICHT AKTIVIEREN, OHNE DIE DATEN ZU FILTERN !!! Filtern Sie das Möglichste (nach Datenbank, Hostname, was auch immer Sie glauben) und starten Sie erst dann den Trace. Vergiss nicht, den Profiler danach zu schließen :-).

PS: Ich erinnere mich an eine andere nette Option: Entlang des Traces sollten Sie auch Daten mit Perfmon speichern (wählen Sie nur IO-Parameter). Profiler hat eine nette Funktion, eine Trace-Datei und eine Perfmon-Datendatei zusammen zu importieren. Und Sie können dort sehen, wann Sie die größten IO-Spikes haben.

PS2: Ich stimme zu, dass Gaius 'Option eleganter ist. Aber ich lasse meine sperrige Antwort für die Nachwelt! :-)


5

Wenn Sie es sich noch nicht angesehen haben, sollten Sie sich Adam Machanics sp_WhoIsActive ansehen. Kürzlich hat er eine Reihe von Blog-Posts verfasst, in denen verschiedene Funktionen von sp_WhoIsActive erläutert wurden. Eine davon ist @delta_interval.

Dies zeigt Ihnen nicht nur, was insgesamt die meiste CPU oder E / A beansprucht, sondern auch, was gerade die meiste CPU oder E / A beansprucht.

In den folgenden Blogserien finden Sie eine vollständige Erläuterung dieser Funktion:

http://whoisactive.com/docs/01_background/

Im folgenden Blog-Beitrag wird erläutert, wie Sie die Ausgabe von sp_WhoIsActive sortieren und auswählen, welche Spalten angezeigt werden sollen:

http://whoisactive.com/docs/24_output/

Dies ist einer der vielen Posts, die unter dem folgenden von ihm eingerichteten Update-Link verfügbar sind.

http://whoisactive.com

Zum Zeitpunkt der Beantwortung dieser Frage ist Version 11.0 verfügbar. Wenn Sie also eine ältere Version verwenden, ist möglicherweise ein Upgrade erforderlich: D

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.