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 12345
beispielsweise aus einer INT
Spalte 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.
quelle
Antworten:
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.
quelle
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.
Spalten mit Nicht-Text-Datentypen werden in einem vom TDS-Protokoll definierten Binärformat übertragen .
quelle
Um dieses Problem zu umgehen , können Sie, wie an anderer Stelle erwähnt , ein VPN einrichten und die Komprimierung aktivieren.
quelle
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.
quelle