Werden die von SQL Server abgerufenen Daten zur Übertragung komprimiert?


20

Werden von Microsoft SQL Server abgerufene Daten komprimiert? Wenn dies durch die Verbindungszeichenfolge gesteuert wird, gibt es eine einfache Möglichkeit, festzustellen, ob eine bestimmte App diese verwendet?

Ich untersuche Analysewerkzeuge, und es kann Minuten dauern, bis das Datenvolumen über unser Netzwerk übertragen wird. Ich frage mich, ob ich eine Leistungssteigerung erwarten sollte, wenn wir Daten aus einem komprimierten Datenspeicher auf demselben Remoteserver abrufen.

Solange wir uns mit dem Thema beschäftigen, bin ich neugierig: Werden Daten in Binär- oder ASCII-Form übertragen? Wenn der Wert 12345beispielsweise aus einer INTSpalte abgefragt wird, wird er als die fünf Bytes 0x31, 0x32, 0x33, 0x34, 0x35 übertragen. die zwei Bytes, die für den Wert benötigt werden; oder vier Bytes für die Spalte erforderlich?

Um es klar auszudrücken, ich verstehe, dass es Optionen zum Speichern und Sichern von Daten mit Komprimierung gibt. Ich frage, wie Daten übertragen werden.


Komprimierung ist ein interner Mechanismus. Eine Seite wird auf der Festplatte und im Pufferpool komprimiert, aber ein regulärer Bytestrom auf der Leitung. @ShawnMelton hat bereits über das Schnüffeln des Drahtformats gebloggt und wird hoffentlich mit den Highlights antworten.
Mark Storey-Smith

Was ich schrieb, konzentrierte sich mehr darauf, ob es verschlüsselt war. Ich konnte die Daten, die ich zog, in lesbarem Format heraussuchen, obwohl ich keine Ganzzahlwerte ausprobierte. Die einzige Möglichkeit, dies sicher zu wissen, ist das Einrichten und Ausprobieren: mssqltips.com/sqlservertip/2436/…
Shawn Melton

@ MarkStorey-Smith: Also die Antwort ist "nein", Daten werden nicht komprimiert? Das ist eine Schande, aber es hilft zu erklären, warum die Übertragung dieser großen Abfragen so lange dauern kann. Anscheinend brauche ich einen Cache, der physisch näher ist. Wenn Sie eine tatsächliche Antwort geben möchten, werde ich diese akzeptieren.
Jon of All Trades

@ShawnMelton: Das klingt sicherlich nach der richtigen Vorgehensweise. Ich habe einfach nicht genug Netzwerk-Hintergrund, um auf die richtige Ebene zu gelangen und zuversichtlich zu sein, was ich sehe. Zum Glück für mich gibt es Menschen mit mehr Fähigkeiten und mehr Zeit auf ihren Händen!
Jon of All Trades

Antworten:


16

Die Daten, die Sie komprimieren möchten, werden über TDS übertragen . Es gibt hier eine geringfügige Komprimierung, aber bei weitem nicht die Komprimierungsart, die Sie mit der Seiten- / Zeilenkomprimierung, der Sicherungskomprimierung oder der ColumnStore-Komprimierung erhalten.

Es wurde schon einmal nachgefragt:

http://connect.microsoft.com/SQLServer/feedback/details/412131/enable-network-compression-compress-tds-stream

http://connect.microsoft.com/SQLServer/feedback/details/377479/wan-compression-option

Die Artikel sind noch offen, also gibt es vielleicht Hoffnung. Es gibt keine Möglichkeit, dies über die Verbindungszeichenfolge zu steuern, die ich jemals gesehen habe.

In der Zwischenzeit gibt es einige Produkte, die behaupten, dies zu tun, z

http://www.nitrosphere.com/products/nitroaccelerator/

http://toonel.net/tcpany.htm

Sie können das Netzwerk zwischen Ihrem SQL Server und den Anwendungsservern möglicherweise auch so konfigurieren, dass die Komprimierung (und andere Dinge wie Verschlüsselung) unterstützt wird, aber Sie sind hier nicht in meinem Rahmen, und ich bin nicht sicher, ob dies von jeder einzelnen SQL-Funktion unterstützt wird Server.

Und um ehrlich zu sein, bin ich nicht davon überzeugt, dass Sie sich hier auf die Optimierung konzentrieren möchten. Durch die Komprimierung dieses Streams werden die Daten möglicherweise langsamer und die Vorteile des Sendens von weniger Bytes überwiegen. Ich würde lieber Geld für eine bessere Netzwerkkonnektivität zwischen Server und Client (s) investieren, als Zeit damit zu verbringen, in diese Art von Arbeit zu investieren und zu testen, ob sie irgendwelche tatsächlichen Vorteile hat - und dies erst danach tun zu können. Von 10/100 bis Gig Fibre hat eine bekannte und vorhersehbare Auswirkung auf die Netzwerk-E / A.


Ich bin mir nicht sicher, in welchem ​​Format die über die Leitung gesendeten Bytes vorliegen. Sie müssen dafür eine Art Paket-Sniffer einrichten (oder vielleicht hat das schon jemand gemacht und mischt sich ein).

Was die Auswirkung der Komprimierung betrifft, so sind Sie derzeit mit ziemlicher Sicherheit an die E / A und nicht an die CPU gebunden, es sei denn, Sie arbeiten mit Fusion-IO oder anderen High-End-SSD-Lösungen. Solange Sie CPU-Overhead haben, sollten Sie eine schnellere Leistung bei aktivierter Komprimierung erzielen (dies ändert jedoch nicht die Netzwerkleistung , da die Daten vor der Übertragung dekomprimiert werden). Ich sage, dass Sie nichts über Ihre Server, Ihre Anwendung, Ihre Daten oder Ihre Nutzungsmuster wissen - Sie könnten durchaus einen Vorteil haben, wenn die Komprimierung tatsächlich die Leistung beeinträchtigt oder wenn die Daten einfach kein guter Kandidat für gute Komprimierungsverhältnisse sind.


Es ist definitiv das Netzwerk, das das Problem ist, zumindest bei der Übertragung von 10 MB. Ich kann Daten in Sekundenschnelle auf dem Server selbst in RDP abfragen, aber der Server befindet sich physisch außerhalb des Status und kopiert die Daten auf einen Computer am Unternehmensstandort. dauert Minuten.
Jon of All Trades

Vielleicht sollten Sie also replizieren, spiegeln oder etwas anderes und die Daten lokal von der Kopie abfragen. Auf diese Weise wird die Latenz für Endbenutzer nicht spürbar. Wie Sie dies angehen, hängt davon ab, wie aktuell die Daten sein müssen. Und auch, ob ein Endbenutzer wirklich 10 MB Daten gleichzeitig abfragen muss.
Aaron Bertrand

Genau. Es sei denn, wir können den BI-Server verlagern. In Bezug auf das Datenvolumen wird es für die Analyse (mit QlikView, ATM) verwendet, also für jahrelange Daten und viele Dimensionen und Fakten. Dateien können mit Komprimierung bis zu 100 MB groß sein, und das sind nur Daten für ein paar Jahre!
Jon of All Trades

@ JonofAllTrades Mit den besten Absichten gemeint ... es klingt, als würden Sie versuchen, das falsche Problem mit der falschen Lösung zu lösen.
Mark Storey-Smith

@ MarkStorey-Smith: Was ist die Alternative? Es gibt viele Daten und der Zugriff über unser WAN ist langsam. Wie Aaron erwähnt, würde eine Art lokaler Cache helfen. Das Reduzieren des übertragenen Datenvolumens würde den Umfang der Benutzeranalyse verringern, was den Zweck der visuellen Datenerkennung zunichte macht.
Jon of All Trades

4

Werden von Microsoft SQL Server abgerufene Daten komprimiert? Wenn dies durch die Verbindungszeichenfolge gesteuert wird, gibt es eine einfache Möglichkeit, festzustellen, ob eine bestimmte App diese verwendet?

Technisch Ergebnisse können komprimiert werden , sehr leicht .

Mit TDS 7.3B (Tabular Data Stream), das erstmals von SQL Server 2008 R2 unterstützt wurde, wurde die sogenannte Null-Bitmap-Komprimierung eingeführt , mit der Zeilen mit mehreren Nullen mit weniger Bytes übertragen werden können, als für Nullfeldwerte normalerweise erforderlich sind.

Der Server kann beim Senden der Ergebnisse reguläre Zeilen mit null-Bitmap-komprimierten Zeilen mischen. Der Client hat keinen Einfluss darauf, sodass keine relevanten clientseitigen Konfigurationsoptionen verfügbar sind.

Null-Bitmap ist die einzige Form der Komprimierung, die derzeit von TDS unterstützt wird. Wenn eine Zeile nicht nullbitmapkomprimiert ist, wird sie nicht komprimiert gesendet.

Solange wir uns mit dem Thema beschäftigen, bin ich neugierig: Werden Daten in Binär- oder ASCII-Form übertragen?

Spalten mit Nicht-Text-Datentypen werden in einem vom TDS-Protokoll definierten Binärformat übertragen .


2

Um dieses Problem zu umgehen , können Sie, wie an anderer Stelle erwähnt , ein VPN einrichten und die Komprimierung aktivieren.

Wie bereits erwähnt, enthält das SQL Server TDS-Protokoll keine Komprimierung. Es ist auch erwähnenswert, dass standardmäßig auch keine Verschlüsselung vorhanden ist. Um die Verschlüsselung zu aktivieren, müssen Sie Zertifikate verwenden und in den Verbindungszeichenfolgen angeben.

Die einfachste Lösung für beide Probleme besteht darin, einen VPN-Tunnel mit aktivierter Verschlüsselung und Komprimierung zu öffnen. Einfaches Microsoft PPTP löst beide Probleme und ist einfach einzurichten.


1

Warum nicht eine lokale SQL-Instanz einrichten, die die relevanten Daten zwischenspeichert und alle n Stunden synchronisiert? Eine andere Sache, die Sie sich ansehen sollten, ist die Vorausberechnung der Cubes und die Schaltfläche "Details abrufen", wenn Sie eine Zusammenfassungszelle erreichen. Das würde dann nur die relevanten Detailzeilen holen.


Dein erster Satz hört sich sehr nach diesem Kommentar an .
Aaron Bertrand
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.