Abfragen können in Millisekunden fertig sein und trotzdem Minuten brauchen, bis sie über ein VPN einen Laptop erreichen. Der Server schreibt Zeilen in Puffer, die Verbindung transportiert sie, und der Client verbraucht sie, und diese Stufen überlappen sich, statt nacheinander zu laufen. Jede von ihnen kann zur Grenze werden. Finden Sie die Stufe, die tatsächlich wartet, bevor Sie die Bandbreite ändern oder die Komprimierung einschalten.

Drei Stufen, eine Stoppuhr

Teilen Sie den Timer in zwei Zahlen mit unterschiedlicher Bedeutung: den Moment, in dem die erste Zeile verfügbar ist, und den Moment, in dem die letzte Zeile verbraucht ist. Ein Raster, das die erste Seite zeichnet, beweist nur, dass die Abfrage begonnen hat. Die Zeit bis zum vollständigen Ergebnis ist das, was der Benutzer beim Exportieren oder Scrollen bis zum Ende erlebt.

Notieren Sie beide Zahlen zusammen mit dem Abfragetext, den Parametern und den Verbindungseinstellungen. Ohne diesen Kontext vergleicht man zwei verschiedene Aufgaben, nicht zwei Orte.

Lesen Sie das Warten vor dem Netzwerk

SQL Server schreibt Ergebniszeilen in Ausgabepuffer, die der Client abholt, und ein Client, der langsam konsumiert, kann den Server auf diesem Senden warten lassen. Der Wartetyp ist ASYNC_NETWORK_IO, und Microsofts Hinweis zur Fehlerbehebung nennt große Ergebnisse und clientseitige Verarbeitung unter den Ursachen. Das Warten sagt, dass der Sendepfad blockiert ist, nicht warum.

Ein langsames VPN kann dazu beitragen, aber auch ein Client, der jede Zeile formatiert, in eine Datei schreibt oder zwischen Stapeln pausiert. Der Name des Wartens ist ein Hinweis auf die nächste Messung, kein Urteil über die Verbindung.

SELECT wait_type, wait_time_ms
FROM sys.dm_os_wait_stats
WHERE wait_type = 'ASYNC_NETWORK_IO';

Lesen Sie den Zähler, während die begrenzte Arbeitslast läuft, nicht nach einer Leerlaufstunde, denn kumulative Zähler mischen jede Sitzung seit dem Start der Instanz. Vergleichen Sie das Delta über den Lauf statt der Gesamtsumme über die Lebensdauer. Ein wachsendes Delta während der Übertragung engt die Frage auf Verbrauch oder Auslieferung ein.

Stellen Sie beide Clients auf dieselbe Uhr

Führen Sie eine begrenzte Arbeitslast von einem Client nahe der Datenbank und vom entfernten Client aus. Halten Sie Abfrage, Parameter, Ergebnisgröße und Verbindungseinstellungen identisch. Verwenden Sie auf beiden Seiten dieselbe Messung, denn Serverausführungszeit, Rasteranzeigezeit und Exportzeit sind drei verschiedene Uhren. Eine serverseitige Zahl mit einem clientseitigen Export-Timer zu vergleichen, ergibt eine Schlussfolgerung, die nicht überprüfbar ist.

Wenn der Pfad verantwortlich erscheint, soll der Netzwerkverantwortliche Verluste, Neuübertragungen und erreichten Durchsatz für genau diesen Datenfluss beobachten, während die Übertragung läuft. Ein allgemeiner Geschwindigkeitstest kann eine andere Route, einen anderen Endpunkt oder ein anderes Nebenläufigkeitsmuster verwenden. Eine kleine erfolgreiche Anfrage sagt wenig über eine anhaltende Ergebnisübertragung.

Kürzen Sie Bytes, bevor Sie den Pfad beschuldigen

Filtern, Aggregieren und die Auswahl nur der benötigten Spalten reduzieren sowohl das Übertragungsvolumen als auch die Arbeit, die der Client mit jeder Zeile hat. Bewahren Sie das beabsichtigte Ergebnis, denn ein Bericht kann Details brauchen, die eine Zusammenfassung auf dem Bildschirm nicht hat.

Für wiederholbare Exporte kann ein genehmigter Ausführungsort nahe der Datenbank eine definierte Ausgabe schreiben, die dann einmal geliefert wird. Das ändert den Arbeitsablauf und seine Zugriffskontrollen, und es ist keine Erlaubnis, einen uneingeschränkten Dump auf einem gemeinsam genutzten Host zu hinterlassen.

Komprimierung ist nicht die Standardreparatur. Support und Sicherheit hängen vom tatsächlichen Protokoll und der Bereitstellung ab, und ein komprimierter Strom, den der Client langsam entpackt, kann die Erfahrung verschlechtern. Messen Sie zuerst die Stufe und wählen Sie dann eine unterstützte Änderung für diese Stufe.

Ähnliche Artikel