Les données extraites de SQL Server sont-elles compressées pour la transmission?


20

Les données extraites de Microsoft SQL Server sont-elles compressées? Si cela est contrôlé par la chaîne de connexion, existe-t-il un moyen simple de savoir si une application particulière l'utilise?

J'examine les outils d'analyse, et le volume de données peut prendre quelques minutes à transmettre sur notre réseau. Je me demande si je dois m'attendre à une augmentation des performances si nous extrayons des données d'un magasin de données compressé sur le même serveur distant.

Tant que nous sommes sur le sujet, je suis curieux: les données sont-elles transmises en binaire ou ASCII? Par exemple, si la valeur 12345est interrogée à partir d'une INTcolonne, est-elle transmise sous la forme des cinq octets 0x31, 0x32, 0x33, 0x34, 0x35; les deux octets requis pour la valeur; ou quatre octets comme requis pour la colonne?

Pour être clair, je comprends qu'il existe des options concernant le stockage des données avec compression et leur sauvegarde. Je demande comment les données sont transmises.


La compression est un mécanisme interne. Une page est compressée sur le disque et dans le pool de tampons mais un flux d'octets régulier sur le câble. @ShawnMelton a déjà blogué sur le reniflage du format de fil et nous espérons qu'il répondra avec les faits saillants.
Mark Storey-Smith

Ce que j'ai écrit était plus axé sur le fait de savoir s'il était crypté. Je pouvais choisir les données que je tirais dans un format lisible, bien que je n'aie pas essayé les valeurs entières. La seule façon de savoir avec certitude est simplement de configurer et de l'essayer: mssqltips.com/sqlservertip/2436/…
Shawn Melton

@ MarkStorey-Smith: La réponse est donc "non", les données ne sont pas compressées? C'est dommage, mais cela explique pourquoi ces grosses requêtes peuvent prendre autant de temps à transmettre. On dirait que j'ai besoin d'un cache physiquement plus proche. Si vous souhaitez en faire une réponse réelle, je l'accepterai.
Jon of All Trades

@ShawnMelton: Cela semble certainement être la bonne façon de le faire, je n'ai tout simplement pas assez d'expérience en réseau pour arriver à la bonne couche et avoir confiance en ce que je vois. Heureusement pour moi, il y a des gens avec plus de compétences et plus de temps libre!
Jon of All Trades

Réponses:


16

Les données que vous cherchez à compresser sont celles envoyées via le câble via TDS . Il y a une compression mineure ici mais loin du type de compression que vous obtenez avec la compression de page / ligne, la compression de sauvegarde ou la compression ColumnStore.

Il a été demandé auparavant:

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

Les articles sont toujours ouverts, il y a donc peut-être de l'espoir. Il n'y a aucun moyen de contrôler cela via la chaîne de connexion que j'ai jamais vue.

En attendant, certains produits prétendent le faire, par exemple

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

http://toonel.net/tcpany.htm

Vous pouvez également potentiellement configurer le réseau entre votre serveur SQL et les serveurs d'applications pour prendre en charge la compression (et d'autres choses comme le chiffrement), mais vous êtes hors de ma portée ici, et je ne suis pas sûr que cela soit pris en charge par toutes les fonctionnalités de SQL Serveur.

Et pour être honnête, je ne suis pas convaincu que c'est là que vous souhaitez vous concentrer sur l'optimisation. La compression de ce flux peut en fait ralentir les choses et l'emporter sur les avantages d'envoyer moins d'octets. Je préfère dépenser de l'argent sur une meilleure connectivité réseau entre le serveur et le (s) client (s) plutôt que de passer du temps à investir dans ce type de travail et à tester s'il présente des avantages réels - et à ne pouvoir le faire qu'après. De 10/100 à gig fibre optique a un impact connu et prévisible sur les E / S du réseau.


Je ne suis pas sûr du format des octets envoyés sur le fil; vous devrez mettre en place une sorte de renifleur de paquets pour cela (ou peut-être que quelqu'un a déjà fait cela et va sonner)

En ce qui concerne l'impact de la compression, à moins que vous ne soyez sur Fusion-IO ou d'autres solutions de type SSD haut de gamme, vous êtes presque certainement lié aux E / S actuellement, et non lié au CPU. Donc, tant que vous avez une surcharge du processeur, vous devriez voir des performances plus rapides avec la compression activée (mais cela ne changera pas les performances du réseau , car les données ne sont pas compressées avant la transmission). Je dis que ne rien savoir de vos serveurs, de votre application, de vos données ou de vos modèles d'utilisation - vous pourriez très bien avoir un cas de pointe où la compression nuit réellement aux performances, ou où les données ne sont tout simplement pas un bon candidat pour de bons taux de compression.


C'est certainement le réseau qui pose problème, du moins lors de la transmission de 10s de Mo. Je peux interroger des données en quelques secondes sur le serveur lui-même dans RDP, mais ledit serveur est physiquement situé hors d'état, et donc copier les données sur un ordinateur dans le lieu de l'entreprise - par un simple fichier op ou en interrogeant un ordinateur local pour moi - prend quelques minutes.
Jon of All Trades

Donc, vous devriez peut-être répliquer, mettre en miroir ou autre chose et interroger les données localement à partir de la copie. De cette façon, la latence n'est pas ressentie par les utilisateurs finaux. Votre approche dépend de la fraîcheur des données. Et aussi si vous avez vraiment besoin d'un utilisateur final pour interroger 10s de Mo de données à la fois.
Aaron Bertrand

Exactement. À moins que nous ne puissions déplacer le serveur BI. En ce qui concerne le volume de données, l'utilisation est destinée à l'analyse (en utilisant QlikView, ATM), donc des années de données et beaucoup de dimensions et de faits. Les fichiers peuvent atteindre 100 Mo avec compression, et ce n'est que pour quelques années de données!
Jon of All Trades,

@JonofAllTrades Conçu avec les meilleures intentions ... il semble que vous essayez de résoudre le mauvais problème, avec la mauvaise solution.
Mark Storey-Smith,

@ MarkStorey-Smith: Quelle est l'alternative? Il y a beaucoup de données et l'accès est lent sur notre WAN. Comme le mentionne Aaron, une sorte de cache local serait utile. La réduction du volume de données transmises réduirait la portée de l'analyse des utilisateurs, ce qui allait à l'encontre de l'objectif de la découverte visuelle des données.
Jon of All Trades,

4

Les données extraites de Microsoft SQL Server sont-elles compressées? Si cela est contrôlé par la chaîne de connexion, existe-t-il un moyen simple de savoir si une application particulière l'utilise?

Techniquement, les résultats peuvent être très légèrement compressés .

Tabular Data Stream (TDS) 7.3B, initialement pris en charge par SQL Server 2008 R2, a introduit quelque chose appelé compression bitmap nulle qui permet de transmettre des lignes contenant plusieurs valeurs nulles en utilisant moins d'octets que ce qui est normalement requis par les valeurs de champ nulles.

Le serveur peut mélanger des lignes régulières avec des lignes compressées bitmap nulles à son choix lors de l'envoi des résultats. Le client n'a aucun contrôle sur cela, donc aucune option de configuration côté client n'est disponible.

Le bitmap nul est la seule forme de compression actuellement prise en charge par TDS. Si une ligne n'est pas compressée en bitmap nul, elle est envoyée non compressée.

Tant que nous sommes sur le sujet, je suis curieux: les données sont-elles transmises en binaire ou ASCII?

Les colonnes avec des types de données non textuels sont transmises en utilisant un format binaire défini par le protocole TDS .


2

Comme mentionné ailleurs , pour contourner ce problème, vous pouvez envisager de configurer un VPN et d'activer la compression.

Comme d'autres l'ont dit, aucune compression n'est intégrée au protocole SQL Server TDS. Il convient également de dire que par défaut, il n'y a pas non plus de cryptage. Pour activer le cryptage, vous devez utiliser des certificats et le spécifier dans les chaînes de connexion.

La solution la plus simple pour résoudre les deux problèmes est d'ouvrir un tunnel VPN avec le cryptage et la compression activés. Simple Microsoft PPTP résout les deux problèmes et est facile à configurer.


1

Pourquoi ne pas configurer une instance SQL locale qui met en cache les données pertinentes et se synchronise toutes les n heures? Une autre chose à regarder est de précalculer les cubes et d'avoir un bouton `` obtenir les détails '' lorsque vous atteignez une cellule de résumé. Cela récupérerait alors uniquement les lignes détaillées pertinentes.


Votre première phrase ressemble beaucoup à ce commentaire .
Aaron Bertrand
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.